Bonjour à vous,
Je rencontre un problème avec un script d'envoi d'e-mails. Ce script récupère une liste d'adresses e-mail, et génère un courrier à destination de ces adresses, en concaténant celles-ci dans le champ Bcc (maximum 50 adresses en Bcc par e-mail, envoi en plusieurs e-mails si ça dépasse 50 adresses).
Pour information, cette "alerte e-mail" est déclenchée à la publication d'un document sur le site, en direction des personnes intéressées.
Le script fonctionne bien la plupart du temps. Cependant, par moments, en fonction des envois, une étrange erreur m'est retournée :
Ce qui m'étonne au premier abord, c'est la faute à "Unknow" au lieu de "Unknown"... Déjà
Code : Sélectionner tout - Visualiser dans une fenêtre à part Warning: mail(): Unknow error with '/usr/bin/sendmail -t -i in <path>/email.php on line 54.
Ensuite, je ne trouve pas de trace de cette erreur via Google. J'ai vu un post de quelqu'un ayant rencontré ça auparavant, mais c'était dû à un upgrade de PHP, et le php.ini était alors dans un mauvais répertoire... Ce qui n'est pas le cas ici
Voici un screenshot :
Quelques infos serveur :
C'est un serveur dédié virtuel, et je n'ai pas accès au php.ini (Cependant, je peux demander à l'hébergeur d'intervenir dessus).
La version de PHP est la 4.3 (oui, je sais... ), et tourne en SAFE_MODE=ON.
Je vous mets quelques snippets du code qui a été écrit, même si je précise à nouveau que c'est fonctionnel par moments, et non fonctionnel par d'autres.
Ma question est surtout par rapport à votre expérience : avez-vous déjà rencontré cette erreur ?...
Et quelles seraient selon vous les pistes à explorer pour la résoudre ? (php.ini, RAM serveur, erreur de code, volume d'e-mails à envoyer peut-être trop grand, etc ?...).
En annexe, au cas où, voici le code qui envoie les e-mails. (Je sais que le code n'est pas propre ou optimisé, mais là n'est pas la question )
(info : $email_dest contient une liste séparée par des virgules, des adresses destinataires)
Puis voici la procédure d'envoi d'e-mail (email.php) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 // Nombre de mails par paquet $paquet = 50; // nombre de mails au total $tabTempMail = explode(',',$email_dest); for ($imail = 0; $imail < sizeof($tabTempMail); $imail++) { // parcours du tableau des mails destinataires pour virer ce qui serait vide ou incorrect if ( (strpos( $tabTempMail[$imail], '@') === 0 ) ) { // Dans cet index de tableau, valeur incorrect = on vire unset ($tabTempMail[$imail]); } } $nbMailsTotal = sizeof($tabTempMail); // envoi mails $compteur = 0; while (isset($tabTempMail[$compteur])) { $email_destinataires = ''; for ($m=0;$m<$paquet;$m++) { if( isset($tabTempMail[$compteur]) ) { // envoi des emails au paquet de 50 $email_destinataires .= $tabTempMail[$compteur].','; $compteur++; } } $email_destinataires = substr($email_destinataires,0,( strlen($email_destinataires) - 1 )); // enleve la derniere virgule $tmpEnvoi = envoi_email('../lib/email.html', $email_destinataires, $email_sujet, $contenu); }
Merci à vous si vous avez des pistes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 function envoi_email($emailFichier, $emailDestinataires, $emailSujet, $emailMessage) { // Ouverture du fichier de l'email if ((file_exists($emailFichier)) && (strlen($emailMessage) > 0)) { $fichier = fopen($emailFichier, 'r'); if ($fichier) { $emailHtml = fread($fichier, filesize ($emailFichier)); fclose($fichier); // Spécifie l'adresse de la personne qui envoie l'email // Il faut que cette adresse soit valide et du même domaine que le serveur // qui envoie pour que ça ne soit pas considéré comme du spam $emailSource = 'Chambre d\'Agriculture de l\'Oise <contact@agriculture-de-groupe60.fr>'; $emailReply = 'Chambre d\'Agriculture de l\'Oise <contact@agriculture-de-groupe60.fr>'; // On fait une version HTML // On place le contenu $emailHtml = preg_replace('#!message!#', $emailMessage, $emailHtml); $emailHtml = preg_replace('#!sujet!#', $emailSujet, $emailHtml); // Entêtes des emails $emailHeader = 'From: '.$emailSource."\r\n"; $emailHeader .= 'Reply-To: '.$emailReply."\r\n"; $emailHeader .= 'Bcc: '.$emailDestinataires."\r\n"; $emailHeader .= 'MIME-Version: 1.0'."\r\n"; $emailHeader .= 'Content-Type: text/html; charset=iso-8859-1'; $emailSujet = '=?iso-8859-1?q?'.str_replace('%', '=', rawurlencode($emailSujet)).'?='; $emailCorps = $emailHtml; // On vérifie que le sujet est OK $emailSujet = html_entity_decode($emailSujet, ENT_QUOTES); // On envoie l'email $tmp = mail('', $emailSujet, $emailCorps, $emailHeader); } else { $tmp = false; } } else { $tmp = false; } return $tmp; }
Clément
Partager