phpmailer - 以下SMTP错误:数据不被接受

Yas*_*rük 35 php email smtp phpmailer

我试图找出这个问题6个小时.但没有任何意义.这是场景; 格式正确的HTML模板.

$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> abcdf@somedomain.com<br />
    <b>Message :</b> Here is the message info<br />
';
Run Code Online (Sandbox Code Playgroud)

这是一系列收件人的邮件;

$recipients = array("abc@something.com","xyz@somtehing.com");
Run Code Online (Sandbox Code Playgroud)

一切都很好,电子邮件准备发送.这是phpmailer配置;

$mail = new PHPMailer(); 
$mail->IsSMTP();
$mail->From = "noreply@something.com"; 
$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...";
}
Run Code Online (Sandbox Code Playgroud)

我测试时一切都是一样的.但有时发送电子邮件.有时它没有发送.给我以下错误:The following SMTP Error: Data not accepted.

我希望我解释一下

J H*_* Ha 44

你的服务器不允许你应该配置不同的发件人和用户名:$mail->From比如$mail->Username

  • 我不明白为什么这有很多upvote,它已被接受为正确的答案.答案甚至意味着什么?"你应该配置:$ mail->来自$ mail-> Username"?听起来很模糊. (12认同)
  • @PinoyStackOverflower 你看到评论“你的服务器不允许不同的发件人和用户名”吗 (2认同)
  • 这不是我指出的.你看到我的评论了吗?`你应该配置:$ mail->从类似$ mail->用户名"?听起来很模糊 (2认同)
  • 我认为这是什么意思:某些服务器要求发件人电子邮件地址与用于身份验证的电子邮件地址相同。检查您的姓名,并将其与您用于登录SMTP服务器的用户名匹配。 (2认同)

小智 14

对于与PHP Sailer一起使用Amazon SES的AWS用户,当您的"发件人"邮件发件人不是经过验证的发件人时,也会出现此错误.

要添加经过验证的发件人:

  1. 登录您的Amazon AWS控制台:https://console.aws.amazon.com

  2. 从可用的AWS应用程序列表中选择"Amazon SES"

  3. 在"已验证的发件人"下选择"电子邮件地址" - >"验证新的电子邮件地址"

  4. 导航到该新发件人的电子邮件,单击确认电子邮件的链接.

而且你们都准备好了.

  • 已经验证(所有域名,发件人的电子邮件,收件人的电子邮件)但仍然遇到同样的问题 (3认同)
  • 我忘记请求将我的 AWS SES 配置移出 AWS SES 沙盒模式。在沙盒模式下,任何未经验证的出站电子邮件都将失败。一旦 Amazon 支持人员批准将我的 AWS SES 配置从沙盒转移到生产中,一切就对我来说进展顺利。愚蠢的错误,但也许这个评论会节省其他人几分钟的时间。 (2认同)

zza*_*per 9

将phpmailer设置为在调试中工作,以查看通用消息“ SMTP错误:数据不被接受”背后的“实际”错误。

  $email->SMTPDebug = true;
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案,因为“数据不被接受”可能是由多种不同的原因引起的。在 `$email-&gt;Send();` 行之前添加调试设置行,然后重试,按 CTRL-U,并仔细阅读很长的日志。 (2认同)

pho*_*nix 9

有趣的是,我有同样的问题,对我来说问题是我的连接超时了.为了能够看到我的连接的更多细节,我添加了$ mail-> SMTPDebug = 4; 到我的phpmailer(查找如何捕获调试,因为默认输出函数是echo).

这是结果:

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: 
Run Code Online (Sandbox Code Playgroud)

默认超时设置为10秒.如果您的应用可以支持更多,请将此行添加到您的phpmailer:

$mail->Timeout = 20;
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用.该例外仅显示"SMTP错误:数据未被接受",但启用调试显示SES拒绝未经验证的电子邮件. (2认同)

Ada*_*abo 5

通过$ mail-> Body设置时,超过一定大小的消息会弄乱内容。

您可以对其进行测试,如果它适用于较小的消息,但不适用于较大的消息(超过4-6 kB),那么这就是问题所在。

这似乎是$ mail-> Body的问题,因此您可以通过通过$ mail-> MsgHTML($ message)手动设置HTML正文来解决此问题。然后,您可以尝试通过$ mail-> AltBody仅添加非HTML正文。

希望我能提供帮助,随时提供更多详细信息。