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();
33 // On ajoute les destinataires en plus
34 if ($options['destinataires_plus']){
35 $destinataires_plus = explode(',', $options['destinataires_plus']);
36 $destinataires_plus = array_map('trim', $destinataires_plus);
37 $destinataires = array_merge($destinataires, $destinataires_plus);
38 $destinataires = array_unique($destinataires);
41 // On récupère le courriel de l'envoyeur s'il existe
42 if ($options['champ_courriel']){
43 $courriel_envoyeur = _request($options['champ_courriel']);
45 if (!$courriel_envoyeur) $courriel_envoyeur = '';
47 // Si on a bien des destinataires, on peut continuer
48 if ($destinataires or ($courriel_envoyeur and $options['activer_accuse'])){
49 include_spip('inc/filtres');
50 include_spip('inc/texte');
52 $nom_site_spip = supprimer_tags(typo($GLOBALS['meta']['nom_site']));
54 // On parcourt les champs pour générer le tableau des valeurs
56 foreach ($champs as $champ){
57 $valeurs[$champ] = _request($champ);
60 // On récupère le nom de l'envoyeur
61 if ($options['champ_nom']){
62 $a_remplacer = array();
63 if (preg_match_all('/@[\w]+@/', $options['champ_nom'], $a_remplacer)){
64 $a_remplacer = $a_remplacer[0];
65 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
66 $a_remplacer = array_flip($a_remplacer);
67 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
68 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
70 $nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer));
72 if (!$nom_envoyeur) $nom_envoyeur = $GLOBALS['meta']['nom_site'];
74 // On récupère le sujet s'il existe sinon on le construit
75 if ($options['champ_sujet']){
76 $a_remplacer = array();
77 if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)){
78 $a_remplacer = $a_remplacer[0];
79 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
80 $a_remplacer = array_flip($a_remplacer);
81 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
82 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
84 $sujet = trim(_L($options['champ_sujet'], $a_remplacer));
86 if (!$sujet) $sujet = _T('formidable:traiter_email_sujet', array('nom'=>$nom_envoyeur));
87 $sujet = filtrer_entites($sujet);
89 // Mais quel va donc être le fond ?
90 if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_email.html'))
91 $notification = 'notifications/formulaire_'.$formulaire['identifiant'].'_email';
93 $notification = 'notifications/formulaire_email';
95 // On génère le mail avec le fond
96 $html = recuperer_fond(
99 'id_formulaire' => $formulaire['id_formulaire'],
100 'titre' => _T_ou_typo($formulaire['titre']),
101 'traitements' => $traitements,
102 'saisies' => $saisies,
103 'valeurs' => $valeurs
107 // On génère le texte brut
108 include_spip('classes/facteur');
109 $texte = Facteur
::html2text($html);
111 // On utilise la forme avancé de Facteur
115 'nom_envoyeur' => $nom_envoyeur
117 // Si l'utilisateur n'a pas indiqué autrement, on met le courriel de l'envoyeur dans
118 // Reply-To et on laisse le from par defaut de Facteur car sinon ca bloque sur les
119 // SMTP un peu restrictifs.
121 if ($courriel_envoyeur && $options['activer_vrai_envoyeur']){
122 $courriel_from = $courriel_envoyeur;
123 } else if ($courriel_envoyeur) {
124 $corps['repondre_a'] = $courriel_envoyeur;
127 // On envoie enfin le message
128 $envoyer_mail = charger_fonction('envoyer_mail','inc');
130 // On envoie aux destinataires
132 $ok = $envoyer_mail($destinataires, $sujet, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
134 // Si c'est bon, on envoie l'accusé de réception
135 if ($ok and $courriel_envoyeur and $options['activer_accuse']){
136 // On récupère le sujet s'il existe sinon on le construit
137 if ($options['sujet_accuse']){
138 $a_remplacer = array();
139 if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)){
140 $a_remplacer = $a_remplacer[0];
141 foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
142 $a_remplacer = array_flip($a_remplacer);
143 $a_remplacer = array_intersect_key($valeurs, $a_remplacer);
144 $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
146 $sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer));
148 if (!$sujet_accuse) $sujet_accuse = _T('formidable:traiter_email_sujet_accuse');
149 $sujet_accuse = filtrer_entites($sujet_accuse);
151 // Mais quel va donc être le fond ?
152 if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_accuse.html'))
153 $accuse = 'notifications/formulaire_'.$formulaire['identifiant'].'_accuse';
155 $accuse = 'notifications/formulaire_accuse';
157 // On génère l'accusé de réception
158 $html_accuse = recuperer_fond(
161 'id_formulaire' => $formulaire['id_formulaire'],
162 'titre' => _T_ou_typo($formulaire['titre']),
163 'message_retour' => $formulaire['message_retour'],
164 'traitements' => $traitements,
165 'saisies' => $saisies,
166 'valeurs' => $valeurs
170 // On génère le texte brut
171 $texte = Facteur
::html2text($html_accuse);
174 'html' => $html_accuse,
176 'nom_envoyeur' => $nom_site_spip
179 $ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
183 $retours['message_ok'] .= "\n<br/>"._T('formidable:traiter_email_message_ok');
186 $retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_email_message_erreur');