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

Last change on this file since 112651 was 112651, checked in by maieul@…, 2 years ago

L'option forcer_from fait deux choses:

  • changer l'adresse d'envoi si domaine différent de celle du webmestre
  • et, si on change l'adresse d'envoi, changer aussi le nom de l'expediteur

Le premier point permet de fonctionner avec des serveurs SMTP stricts,
qui vérifient le domaine.

Toutefois, on peut vouloir garder le nom expediteur, même si on change
l'adresse expeditrice (ce que fait, par ex, Formidable lorsqu'on ne
force pas le champ From).

Une nouvelle option permet cela.

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