J'essaie de résoudre ce problème pendant 6 heures. Mais rien n’a de sens. Voici le scénario. Il existe un modèle HTML
bien formaté.
$mail_body = '
<b>Message Num :</b> 769<br />
<b>Message Date :</b> 2013-04-08 09:03:21<br />
<b>Name :</b> John Doe<br />
<b>Phone :</b> 123456789<br />
<b>E-mail :</b> [email protected]<br />
<b>Message :</b> Here is the message info<br />
';
Voici le tableau des mails des destinataires;
$recipients = array("[email protected]","[email protected]");
Tout est en ordre et un courrier électronique est prêt à être envoyé.
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = "[email protected]";
$mail->FromName = "TEST";
$mail->WordWrap = 50;
foreach($recipients as $mail_add) {
$mail->AddAddress($mail_add);
}
$mail->IsHTML(true);
$mail->Subject = "TEST Subject";
$mail->Body = $mail_body;
if(!$mail->Send()) {
echo $mail->ErrorInfo;
} else {
echo "Mail sent...";
}
Tout est pareil quand je le teste. Mais parfois, un email était envoyé. Parfois, ce n'était pas envoyé. Donnez-moi l'erreur suivante: The following SMTP Error: Data not accepted.
J'espère avoir expliqué
votre serveur n'autorise pas l'expéditeur et le nom d'utilisateur différentsvous devriez configurer: $mail->From
comme $mail->Username
Pour les utilisateurs AWS qui travaillent avec Amazon SES avec PHPMailer, cette erreur apparaît également lorsque l'expéditeur du courrier "de" n'est pas un expéditeur vérifié.
Pour ajouter un expéditeur vérifié:
Connectez-vous à votre console Amazon AWS: https://console.aws.Amazon.com
Sélectionnez "Amazon SES" dans votre liste d'applications AWS disponibles.
Sélectionnez, sous "Expéditeurs vérifiés", les "Adresses e-mail" -> "Vérifier une nouvelle adresse e-mail".
Accédez au courrier électronique de ce nouvel expéditeur, cliquez sur le lien du courrier électronique de confirmation.
Et vous êtes tous ensemble.
Fait intéressant, j'avais exactement le même problème et pour moi, le problème était que ma connexion prenait fin. Pour pouvoir voir plus de détails sur mes connexions, j'ai ajouté $ mail-> SMTPDebug = 4; à mon phpmailer (cherchez comment capturer le débogage puisque la fonction de sortie par défaut est echo).
Voici le résultat:
SMTP -> get_lines(): $data was ""
SMTP -> get_lines(): $str is ""
SMTP -> get_lines(): $data is ""
SMTP -> get_lines(): timed-out (10 seconds)
SMTP -> FROM SERVER:
SMTP -> ERROR: DATA not accepted from server:
Le délai d'attente par défaut est fixé à 10 secondes. Si votre application peut en supporter davantage, ajoutez cette ligne à votre phpmailer:
$mail->Timeout = 20;
Sur un certain message de taille, il gâche le contenu lors de la configuration via $ mail-> Body.
Vous pouvez le tester, si cela fonctionne bien avec les petits messages, mais pas avec les plus gros (plus de 4 à 6 Ko), alors c'est le problème.
Cela semble être le problème de $ mail-> Body, vous pouvez donc y remédier en définissant le corps HTML manuellement via $ mail-> MsgHTML ($ message). Et ensuite, vous pouvez essayer d’ajouter uniquement le corps non-HTML par $ mail-> AltBody.
J'espère que je pourrai vous aider, n'hésitez pas à fournir plus de détails, d'informations.
configurez phpmailer pour qu'il fonctionne en mode débogage afin de voir l'erreur "réelle" derrière le message générique 'Erreur SMTP: données non acceptées'. Dans notre cas, le texte du message déclenchait le filtre anti-spam du serveur smtp.
$email->SMTPDebug = true;
Essayez de définir le port sur 26, cela a résolu mon problème avec le message "données non acceptées".
J'utilisais juste
$mail->Body = $message;
et pour certaines formes figées, PHP renvoyait l'erreur:
Erreur SMTP: données non acceptées.Erreur serveur SMTP: échec de la commande DATA END Détails: ce message a été classé comme SPAM et ne peut pas être remis Code SMTP: 550
J'ai résolu le problème en ajoutant ce code après $ mail-> Body = $ message:
$mail->MsgHTML = $message;
$mail->AltBody = $message;
Nous envoyons des courriers électroniques via les serveurs SMTP de Gmail. PHPMailer reçoit parfois cette erreur exacte lorsque nous atteignons nos limites d'envoi Gmail.
Vous pouvez vérifier s'il vous arrive la même chose en accédant à Gmail et en essayant d'envoyer manuellement un courrier électronique. Dans notre cas, cela affiche le message d'erreur le plus utile concernant l'envoi de limites.
Dans mon cas, dans cpanel, j'ai l'option 'Enregistrer les identifiants de messagerie' où j'ajoute mon adresse e-mail et après 30 minutes, cela fonctionne très bien avec la fonction mail php simple.
Je frappais cette erreur avec phpMailer + Amazon SES. L'erreur phpMailer n'est pas très descriptive:
2: message: SERVER -> CLIENT: 554 Transaction failed: Expected ';', got "\"
1: message:
2: message: SMTP Error: data not accepted.
Pour moi, le problème était simplement que j'avais le type de contenu suivant:
$phpmailer->ContentType = 'text/html; charset=utf-8\r\n';
Mais qu'il ne devrait pas y avoir de saut de ligne:
$phpmailer->ContentType = 'text/html; charset=utf-8';
... Je soupçonne que c'était du code hérité de notre ancienne version. Donc, en gros, vérifiez tous les paramètres $ phpmailer que vous ajoutez - le moindre détail compte.
Je rencontrais ce même problème. Dans mon cas, l'envoi du courrier expirait parce que mon serveur Exchange relayait le courrier électronique vers un serveur sur Internet. Ce serveur avait dépassé son quota de bande passante. Apparemment, php mailer a un délai d’expiration intégré et il n’a pas été assez long pour voir le message.