4 if (!defined("_ECRIRE_INC_VERSION")) return;
6 function traiter_email_dist($args, $retours){
7 $formulaire = $args['formulaire'];
8 $options = $args['options'];
9 $saisies = unserialize($formulaire['saisies']);
10 $traitements = unserialize($formulaire['traitements']);
11 $champs = saisies_lister_champs($saisies);
13 // On récupère les destinataires
14 if ($options['champ_destinataires']){
15 $destinataires = _request($options['champ_destinataires']);
16 if (!is_array($destinataires) and intval($destinataires)){
17 $destinataires = array($destinataires);
19 if (is_array($destinataires)){
20 // On récupère les mails des destinataires
21 $destinataires = array_map('intval', $destinataires);
22 $destinataires = sql_allfetsel(
25 sql_in('id_auteur', $destinataires)
27 $destinataires = array_map('reset', $destinataires);
31 $destinataires = array();
32 if ($options['champ_courriel_destinataire_form']) {
33 $courriel_champ_form = _request($options['champ_courriel_destinataire_form']);
34 $destinataires[] = $courriel_champ_form;
38 // On ajoute les destinataires en plus
39 if ($options['destinataires_plus']){
40 $destinataires_plus = explode(',', $options['destinataires_plus']);
41 $destinataires_plus = array_map('trim', $destinataires_plus);
42 $destinataires = array_merge($destinataires, $destinataires_plus);
43 $destinataires = array_unique($destinataires);
46 // On récupère le courriel de l'envoyeur s'il existe
47 if ($options['champ_courriel']){
48 $courriel_envoyeur = _request($options['champ_courriel']);
50 if (!$courriel_envoyeur) $courriel_envoyeur = '';
52 // Si on a bien des destinataires, on peut continuer
53 if ($destinataires or ($courriel_envoyeur and $options['activer_accuse'])){
54 include_spip('inc/filtres');
55 include_spip('inc/texte');
57 $nom_site_spip = supprimer_tags(typo($GLOBALS['meta']['nom_site']));
59 // On parcourt les champs pour générer le tableau des valeurs
61 foreach ($champs as $champ){
62 $valeurs[$champ] = _request($champ);
65 // On récupère le nom de l'envoyeur
66 if ($options['champ_nom']){
67 $a_remplacer = array();
68 if (preg_match_all('/@[\w]+@/', $options['champ_nom'], $a_remplacer)){
69 $a_remplacer = $a_remplacer[0];
70 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
71 $a_remplacer = array_flip($a_remplacer);
72 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
73 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
75 $nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer));
77 if (!$nom_envoyeur) $nom_envoyeur = $nom_site_spip;
79 // On récupère le sujet s'il existe sinon on le construit
80 if ($options['champ_sujet']){
81 $a_remplacer = array();
82 if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)){
83 $a_remplacer = $a_remplacer[0];
84 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
85 $a_remplacer = array_flip($a_remplacer);
86 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
87 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
89 $sujet = trim(_L($options['champ_sujet'], $a_remplacer));
91 if (!$sujet) $sujet = _T('formidable:traiter_email_sujet', array('nom'=>$nom_envoyeur));
92 $sujet = filtrer_entites($sujet);
94 // Mais quel va donc être le fond ?
95 if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_email.html'))
96 $notification = 'notifications/formulaire_'.$formulaire['identifiant'].'_email';
98 $notification = 'notifications/formulaire_email';
100 // On génère le mail avec le fond
101 $html = recuperer_fond(
104 'id_formulaire' => $args['id_formulaire'],
105 'titre' => _T_ou_typo($formulaire['titre']),
106 'traitements' => $traitements,
107 'saisies' => $saisies,
108 'valeurs' => $valeurs
112 // On génère le texte brut
113 include_spip('facteur_fonctions');
114 $texte = facteur_mail_html2text($html);
116 // On utilise la forme avancé de Facteur
120 'nom_envoyeur' => filtrer_entites($nom_envoyeur),
122 // Si l'utilisateur n'a pas indiqué autrement, on met le courriel de l'envoyeur dans
123 // Reply-To et on laisse le from par defaut de Facteur car sinon ca bloque sur les
124 // SMTP un peu restrictifs.
126 if ($courriel_envoyeur && $options['activer_vrai_envoyeur']){
127 $courriel_from = $courriel_envoyeur;
128 } else if ($courriel_envoyeur) {
129 $corps['repondre_a'] = $courriel_envoyeur;
132 // On envoie enfin le message
133 $envoyer_mail = charger_fonction('envoyer_mail','inc');
135 // On envoie aux destinataires
137 $ok = $envoyer_mail($destinataires, $sujet, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
139 // Si c'est bon, on envoie l'accusé de réception
140 if ($ok and $courriel_envoyeur and $options['activer_accuse']){
141 // On récupère le sujet s'il existe sinon on le construit
142 if ($options['sujet_accuse']){
143 $a_remplacer = array();
144 if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)){
145 $a_remplacer = $a_remplacer[0];
146 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
147 $a_remplacer = array_flip($a_remplacer);
148 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
149 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
151 $sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer));
153 if (!$sujet_accuse) $sujet_accuse = _T('formidable:traiter_email_sujet_accuse');
154 $sujet_accuse = filtrer_entites($sujet_accuse);
156 // Mais quel va donc être le fond ?
157 if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_accuse.html'))
158 $accuse = 'notifications/formulaire_'.$formulaire['identifiant'].'_accuse';
160 $accuse = 'notifications/formulaire_accuse';
162 // On génère l'accusé de réception
163 $html_accuse = recuperer_fond(
166 'id_formulaire' => $formulaire['id_formulaire'],
167 'titre' => _T_ou_typo($formulaire['titre']),
168 'message_retour' => $formulaire['message_retour'],
169 'traitements' => $traitements,
170 'saisies' => $saisies,
171 'valeurs' => $valeurs
175 // On génère le texte brut
176 $texte = facteur_mail_html2text($html_accuse);
179 'html' => $html_accuse,
181 'nom_envoyeur' => filtrer_entites($nom_site_spip),
184 $ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
188 $retours['message_ok'] .= "\n"._T('formidable:traiter_email_message_ok');
191 $retours['message_erreur'] .= "\n"._T('formidable:traiter_email_message_erreur');
195 // noter qu'on a deja fait le boulot, pour ne pas risquer double appel
196 $retours['traitements']['email'] = true;