source: spip-zone/_plugins_/facteur/trunk/formulaires/configurer_facteur.php @ 100653

Last change on this file since 100653 was 100653, checked in by marcimat@…, 4 years ago

Pour le SMTP, pouvoir choisir les connexions sécurisées même en PHP7.
En fait, on enlève le test sur PHP5 (qui venait de r20308), car SPIP 3 est forcément en php5.1 minimum.

File size: 8.8 KB
Line 
1<?php
2/**
3 * Plugin Facteur 2
4 * (c) 2009-2011 Collectif SPIP
5 * Distribue sous licence GPL
6 *
7 */
8
9if (!defined('_ECRIRE_INC_VERSION')) {
10        return;
11}
12
13function formulaires_configurer_facteur_charger_dist() {
14        include_spip('inc/config');
15        $valeurs = array(
16                'facteur_adresse_envoi'       => lire_config('facteur_adresse_envoi'),
17                'facteur_adresse_envoi_nom'   => lire_config('facteur_adresse_envoi_nom'),
18                'facteur_adresse_envoi_email' => lire_config('facteur_adresse_envoi_email'),
19                'facteur_forcer_from'         => lire_config('facteur_forcer_from'),
20                'facteur_smtp'                => lire_config('facteur_smtp'),
21                'facteur_smtp_host'           => lire_config('facteur_smtp_host'),
22                'facteur_smtp_port'           => lire_config('facteur_smtp_port', 25),
23                'facteur_smtp_auth'           => lire_config('facteur_smtp_auth'),
24                'facteur_smtp_username'       => lire_config('facteur_smtp_username'),
25                'facteur_smtp_password'       => '',
26                '_facteur_smtp_password'       => lire_config('facteur_smtp_password'),
27                'facteur_smtp_secure'         => lire_config('facteur_smtp_secure'),
28                'facteur_smtp_sender'         => lire_config('facteur_smtp_sender'),
29                'facteur_filtre_images'       => lire_config('facteur_filtre_images'),
30                'facteur_filtre_iso_8859'     => lire_config('facteur_filtre_iso_8859'),
31                'facteur_cc'                  => lire_config('facteur_cc'),
32                'facteur_bcc'                 => lire_config('facteur_bcc'),
33                'email_test'                  => lire_config('facteur_adresse_envoi') == 'oui' ? lire_config('facteur_adresse_envoi_email') : $GLOBALS['meta']['email_webmaster'],
34                'tester'                      => '',
35        );
36
37        // recuperer le from par defaut actuel pour l'indiquer dans le formulaire
38        include_spip('classes/facteur');
39        $facteur = new Facteur('test@example.org', 'Test', '', '', array('adresse_envoi' => 'non'));
40        $valeurs['_from_defaut'] = $facteur->From;
41        if ($facteur->FromName) {
42                $valeurs['_from_defaut'] = $facteur->FromName . ' &lt;'.$valeurs['_from_defaut'].'&gt;';
43        }
44
45        return $valeurs;
46}
47
48function formulaires_configurer_facteur_verifier_dist() {
49        $erreurs = array();
50        include_spip('inc/config');
51        if ($email = _request('facteur_adresse_envoi_email')
52                and !email_valide($email)) {
53                $erreurs['facteur_adresse_envoi_email'] = _T('form_email_non_valide');
54                set_request('facteur_adresse_envoi', 'oui');
55        }
56        if (_request('facteur_smtp') == 'oui') {
57                if (!($h = _request('facteur_smtp_host'))) {
58                        $erreurs['facteur_smtp_host'] = _T('info_obligatoire');
59                } else {
60                        $h = trim($h);
61                        $regexp_ip_valide = '#^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$#';
62                        // Source : http://www.d-sites.com/2008/10/09/regex-ipv4-et-ipv6/
63                        if (!preg_match($regexp_ip_valide, $h)) { // ce n'est pas une IP
64                                if (!preg_match(';^([^.\s/?:]+[.])*[^.\s/?:]+$;', $h)
65                                        or gethostbyname($h) == $h) {
66                                        $erreurs['facteur_smtp_host'] = _T('facteur:erreur_invalid_host');
67                                }
68                        } else {
69                                if (gethostbyaddr($h) == $h) {
70                                        $erreurs['facteur_smtp_host'] = _T('facteur:erreur_invalid_host');
71                                }
72                        }
73                        set_request('facteur_smtp_host', $h);
74                }
75                if (!($p=_request('facteur_smtp_port'))) {
76                        $erreurs['facteur_smtp_port'] = _T('info_obligatoire');
77                } elseif (!preg_match(';^[0-9]+$;', $p) or !intval($p)) {
78                        $erreurs['facteur_smtp_port'] = _T('facteur:erreur_invalid_port');
79                }
80
81                if (!_request('facteur_smtp_auth')) {
82                        $erreurs['facteur_smtp_auth'] = _T('info_obligatoire');
83                }
84
85                if (_request('facteur_smtp_auth')=='oui') {
86                        if (!_request('facteur_smtp_username')) {
87                                $erreurs['facteur_smtp_username'] = _T('info_obligatoire');
88                        }
89                        if (!_request('facteur_smtp_password') and !lire_config('facteur_smtp_password')) {
90                                $erreurs['facteur_smtp_password'] = _T('info_obligatoire');
91                        }
92                }
93        }
94        if ($emailcc = _request('facteur_cc')
95                and !email_valide($emailcc)) {
96                $erreurs['facteur_cc'] = _T('form_email_non_valide');
97        }
98        if ($emailbcc = _request('facteur_bcc')
99                and !email_valide($emailbcc)) {
100                $erreurs['facteur_bcc'] = _T('form_email_non_valide');
101        }
102
103        if (_request('tester')) {
104                if (!$email = _request('email_test')) {
105                        $erreurs['email_test'] = _T('info_obligatoire');
106                } elseif (!email_valide($email)) {
107                        $erreurs['email_test'] = _T('form_email_non_valide');
108                }
109        }
110
111
112        if (count($erreurs) > 0) {
113                $erreurs['message_erreur'] = _T('facteur:erreur_generale');
114        }
115        return $erreurs;
116}
117
118function formulaires_configurer_facteur_traiter_dist() {
119        include_spip('inc/meta');
120
121        $facteur_adresse_envoi = _request('facteur_adresse_envoi');
122        ecrire_meta('facteur_adresse_envoi', ($facteur_adresse_envoi=='oui')?'oui':'non');
123
124        $facteur_adresse_envoi_nom = _request('facteur_adresse_envoi_nom');
125        ecrire_meta('facteur_adresse_envoi_nom', $facteur_adresse_envoi_nom?$facteur_adresse_envoi_nom:'');
126
127        $facteur_adresse_envoi_email = _request('facteur_adresse_envoi_email');
128        ecrire_meta('facteur_adresse_envoi_email', $facteur_adresse_envoi_email?$facteur_adresse_envoi_email:'');
129
130        $facteur_forcer_from = _request('facteur_forcer_from');
131        ecrire_meta('facteur_forcer_from', ($facteur_forcer_from=='oui')?'oui':'non');
132
133        $facteur_smtp = _request('facteur_smtp');
134        ecrire_meta('facteur_smtp', ($facteur_smtp=='oui')?'oui':'non');
135
136        $facteur_smtp_host = _request('facteur_smtp_host');
137        ecrire_meta('facteur_smtp_host', $facteur_smtp_host?$facteur_smtp_host:'');
138
139        $facteur_smtp_port = _request('facteur_smtp_port');
140        ecrire_meta('facteur_smtp_port', strlen($facteur_smtp_port)?intval($facteur_smtp_port):'');
141
142        $facteur_smtp_auth = _request('facteur_smtp_auth');
143        ecrire_meta('facteur_smtp_auth', ($facteur_smtp_auth=='oui')?'oui':'non');
144
145        $facteur_smtp_username = _request('facteur_smtp_username');
146        ecrire_meta('facteur_smtp_username', $facteur_smtp_username);
147
148        if ($facteur_smtp_password = _request('facteur_smtp_password')) {
149                ecrire_meta('facteur_smtp_password', $facteur_smtp_password);
150        }
151
152        $facteur_smtp_secure = _request('facteur_smtp_secure');
153        ecrire_meta('facteur_smtp_secure', in_array($facteur_smtp_secure, array('non', 'ssl', 'tls')) ? $facteur_smtp_secure : 'non');
154
155        $facteur_smtp_sender = _request('facteur_smtp_sender');
156        ecrire_meta('facteur_smtp_sender', $facteur_smtp_sender);
157
158        ecrire_meta('facteur_filtre_images', intval(_request('facteur_filtre_images')));
159        ecrire_meta('facteur_filtre_iso_8859', intval(_request('facteur_filtre_iso_8859')));
160
161        $facteur_cc = _request('facteur_cc');
162        ecrire_meta('facteur_cc', $facteur_cc?$facteur_cc:'');
163
164        $facteur_bcc = _request('facteur_bcc');
165        ecrire_meta('facteur_bcc', $facteur_bcc?$facteur_bcc:'');
166
167
168        $res = array('message_ok' => _T('facteur:config_info_enregistree'));
169
170        // faut-il envoyer un message de test ?
171        if (_request('tester')) {
172                $res = array();
173                $destinataire = _request('email_test');
174                $err = facteur_envoyer_mail_test($destinataire, _T('facteur:corps_email_de_test'));
175                if ($err) {
176                        $res['message_erreur'] = $err;
177                } else {
178                        $res['message_ok'] = _T('facteur:email_test_envoye');
179                }
180        }
181
182        return $res;
183}
184
185/**
186 * Fonction pour tester un envoi de mail ver sun destinataire
187 * renvoie une erreur eventuelle ou rien si tout est OK
188 * @param string $destinataire
189 * @param string $titre
190 * @return string
191 *   message erreur ou vide si tout est OK
192 */
193function facteur_envoyer_mail_test($destinataire, $titre) {
194
195        include_spip('classes/facteur');
196        $message_html   = recuperer_fond('emails/test_email_html', array());
197        $message_texte  = recuperer_fond('emails/test_email_texte', array());
198        $corps = array(
199                'html' => $message_html,
200                'texte' => $message_texte,
201                'exceptions' => true,
202        );
203
204        // passer par envoyer_mail pour bien passer par les pipeline et avoir tous les logs
205        $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
206        try {
207                $retour = $envoyer_mail($destinataire, $titre, $corps);
208        } catch (Exception $e) {
209                return $e->getMessage();
210        }
211
212        // si echec mais pas d'exception, on signale de regarder dans les logs
213        if (!$retour) {
214                return _T('facteur:erreur').' '._T('facteur:erreur_dans_log');
215        }
216
217        // tout est OK, pas d'erreur
218        return '';
219}
Note: See TracBrowser for help on using the repository browser.