7 votes

PHPMailer 5.1 envoie des messages en double lorsqu'il ajoute plus d'un destinataire.

J'utilise PHPMailer depuis un certain temps maintenant et je n'ai jamais vraiment eu de problèmes, mais la semaine dernière j'ai installé un de mes CMS sur un site web et le client a insisté pour avoir 2 e-mails recevant le contenu du formulaire de contact de son site web.

Ok, pas de problème je me suis dit, il suffit d'ajouter une adresse e-mail en utilisant la fonction $phpmailer->AddAddress(). Cependant, l'ajout d'un deuxième destinataire fait que PHPMailer envoie le courrier deux fois aux deux destinataires. J'ai essayé d'ajouter un troisième récepteur pour voir si je recevais le message trois fois, mais cela n'a rien changé. Donc, l'ajout de 2+ récepteurs fait que PHPMailer envoie le message deux fois à tous les récepteurs.

Il n'y a rien d'étrange dans mon code. C'est un exemple basique de PHPMailer :

$mail             = new PHPMailer();
$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->SetFrom('name@yourdomain.com', 'First Last');

$mail->AddAddress("info@address.com");
$mail->AddAddress("info@address.nl");
$mail->Subject    = "PHPMailer Test Subject via mail(), basic"; 

$mail->Send();

Je suis à court d'options. Je n'ai absolument aucune idée de ce qui ne va pas.

Merci d'avance

--

Juste une pensée au hasard : J'ai remarqué que le mailer est paramétré par défaut en iso-8859-1 et que mon site fonctionne en utf8. Peut-il y avoir une redirection "silencieuse" par le serveur lui-même ?

//EDIT, cela ^^ a résolu mon problème.

//EDIT2 :

Ok, ce n'est pas le cas aujourd'hui le script a bien fonctionné (juste 1 mail avec 2 récepteurs) mais il y a un moment le comportement étrange a recommencé. Des conseils ?

// Solution :

Ok, je me sens vraiment stupide ! La réponse de Zulkhaery Basrul était la plus proche du problème réel ! Voici ce qui s'est passé : J'envoyais un e-mail à plusieurs adresses dans le champ "à". Par exemple :

A : A, B, C

Les deux A/B sont mes propres adresses. Dans Outlook, j'avais des règles de message pour placer les e-mails avec certains destinataires dans un dossier spécifique. A et B avaient tous deux cette règle.

Lorsque j'ai reçu mon courrier électronique, les deux courriers contenaient les deux adresses dans le champ "à". Ce qui fait que les deux mails répondent aux exigences des deux règles. Ainsi, l'original est conservé dans un dossier et une copie est créée dans l'autre (deux fois).

Merci d'y avoir pensé :)

1voto

bolvo Points 43

J'ai rencontré le même problème. La seule et unique bonne réponse est $mail->ClearAllRecipients() Lorsque j'ai utilisé la réponse acceptée, les messages BCC ont été envoyés à tous les destinataires.

1voto

Maxim Masiutin Points 1454

SingleTo n'est pas une bonne idée. Il ne fonctionne qu'avec les transports "sendmail" ou "mail", pas avec SMTP. Si vous utilisez SingleTo avec SMTP, ce paramètre est simplement ignoré sans aucune erreur ou avertissement, et vous pouvez obtenir des doublons.

Selon les auteurs de la bibliothèque, il est prévu que SingleTo soit déprécié dans la version 6.0 de PHPMailer, et supprimé dans la version 7.0. Les auteurs ont expliqué qu'il est préférable de contrôler l'envoi à plusieurs destinataires à un niveau supérieur : "PHPMailer n'est pas un expéditeur de listes de diffusion". Ils expliquent que l'utilisation de la fonction PHP mail() doit être découragée car elle est extrêmement difficile à utiliser en toute sécurité ; SMTP est plus rapide, plus sûr, et donne plus de contrôle et de retour d'information.

Mais SMTP est incompatible avec SingleTo -- c'est pourquoi les auteurs de PHPMailer vont supprimer SingleTo, pas SMTP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X