【问题标题】:phpmailer - The following SMTP Error: Data not acceptedphpmailer - 以下 SMTP 错误:数据不被接受
【发布时间】:2013-03-30 14:10:22
【问题描述】:

我花了 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 />
';

这是收件人邮件的数组;

$recipients = array("abc@something.com","xyz@somtehing.com");

一切看起来都很好,可以发送电子邮件了。这里是 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...";
}

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

希望我解释一下

【问题讨论】:

  • 您想通过外部 SMTP 服务器发送吗?如果没有,则不需要此行:$mail-&gt;IsSMTP(); 如果是,请配置 php mailer smtp 属性。
  • 我使用SMTP server。它是由服务器管理员配置的。它工作正常。但有时电子邮件无法发送。
  • smtp 服务器在你的代码所在的同一台服务器上?
  • 我真的很想知道错误来源是 SMTP 服务器还是我的代码?如果我的代码有问题,为什么有时会发送?
  • @Kovge 是的,他们都在同一台服务器上。

标签: php email smtp phpmailer


【解决方案1】:

您的服务器不允许使用不同的发件人和用户名 你应该配置:$mail-&gt;From like $mail-&gt;Username

【讨论】:

  • 我不明白为什么这有很多赞成票并且它已被接受为正确答案。答案是什么意思? “你应该配置:$mail->From like $mail->Username”?听起来很模糊。
  • @PinoyStackOverflower 你看到评论“你的服务器不允许不同的发件人和用户名”
  • 这不是我要指出的。你看到我的评论了吗? You should config: $mail-&gt;From like $mail-&gt;Username"? Sounds very vague.
  • 我认为这就是意思:某些服务器要求发件人电子邮件地址与用于身份验证的电子邮件地址相同。检查您的发件人名称并将其与您用于登录 SMTP 服务器的用户名相匹配。
  • 这意味着 $mail->Username 和 $mail->From 的电子邮件必须相同。这对我有用。谢谢
【解决方案2】:

对于将 Amazon SES 与 PHPMailer 结合使用的 AWS 用户,当您的“发件人”邮件发件人不是经过验证的发件人时,也会出现此错误。

添加经过验证的发件人:

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

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

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

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

一切准备就绪。

【讨论】:

  • 已经验证(所有域,发件人的电子邮件,收件人的电子邮件),但仍然遇到同样的问题
  • 我忘记请求将我的 AWS SES 配置移出 AWS SES 沙盒模式。在沙盒模式下,任何未经验证的出站电子邮件都将失败。一旦 Amazon 支持部门批准将我的 AWS SES 配置从沙盒转移到生产环境中,对我来说一切正常。愚蠢的错误,但也许这条评论会为其他人节省几分钟。
【解决方案3】:

将 phpmailer 设置为在调试中工作,以查看通用消息“SMTP 错误:数据未接受”背后的“真实”错误,在我们的例子中,消息中的文本触发了 smtp 服务器垃圾邮件过滤器。

  $email->SMTPDebug = true;

【讨论】:

  • 这是最好的答案,因为Data not accepted 可能是由几个不同的事情引起的。在$email-&gt;Send();行之前添加调试设置行,然后重试,按CTRL-U,仔细阅读很长的日志。
【解决方案4】:

有趣的是,我遇到了同样的问题,对我来说,问题是我的连接超时。为了能够查看有关我的连接的更多详细信息,我在我的 phpmailer 中添加了$mail-&gt;SMTPDebug = 4;(查找如何捕获调试,因为默认输出函数是 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: 

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

$mail->Timeout = 20;

【讨论】:

  • 这个答案对其他类型的错误也有帮助(我的电子邮件地址是有效的,但是对于错误的可用区)
  • 这对我有用。异常只显示“SMTP 错误:数据未接受”,但启用调试显示 SES 拒绝了未经验证的电子邮件。
  • 初学者注意事项:在$mail = new PHPMailer(true);下方添加$mail-&gt;SMTPDebug = 4; 行。
【解决方案5】:

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

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

好像是$mail->Body的问题,所以可以通过$mail->MsgHTML($message)手动设置HTML body来解决这个问题。然后你可以尝试通过 $mail->AltBody 只添加非 html 正文。

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

【讨论】:

  • 使用您的建议,它就像 Outlook 的魅力一样。谢谢。
【解决方案6】:

我只是在使用

$mail->Body    = $message;

对于某些汇总表单,PHP 正在返回错误:

SMTP 错误:数据未接受。SMTP 服务器错误:DATA END 命令失败详细信息:此邮件被归类为垃圾邮件,可能无法传递 SMTP 代码:550

我在 $mail->Body=$message 之后添加了这个代码:

$mail->MsgHTML = $message;
$mail->AltBody = $message;

【讨论】:

  • 没有MsgHTML这样的属性;有一个名为msgHTML()方法 可以同时设置BodyAltBody - 所以您在此处发布的代码没有什么特别之处。
  • @Synchro 他正在使用以前的version。您可以查看链接上的代码。
  • 我所说的在旧版本中仍然适用;从来没有一个属性叫做MsgHTML
【解决方案7】:

尝试将端口设置为 26,这解决了我的“数据未接受”消息的问题。

【讨论】:

    【解决方案8】:

    我在使用 phpMailer + Amazon SES 时遇到了这个错误。 phpMailer 错误描述性不是很强:

    2: message: SERVER -> CLIENT: 554 Transaction failed: Expected ';', got "\"
    1: message: 
    2: message: SMTP Error: data not accepted.
    

    对我来说,问题只是我有以下内容类型:

    $phpmailer->ContentType = 'text/html; charset=utf-8\r\n';
    

    但它不应该有换行符:

    $phpmailer->ContentType = 'text/html; charset=utf-8';
    

    ...我怀疑这是我们旧版本的遗留代码。所以基本上,三重检查你添加的每个 $phpmailer 设置 - 最小的细节很重要。

    【讨论】:

      【解决方案9】:

      首先你最好将调试设置为 TRUE:

      $email->SMTPDebug = true;

      或临时更改 public $SMTPDebug 的值 = false;在 PHPMailer 类中。

      然后您可以在浏览器中看到完整的日志。 对我来说,每秒发送的电子邮件太多

      ...
      SMTP -> FROM SERVER:XXX.XX.XX.X Ok
      SMTP -> get_lines(): $data was ""
      SMTP -> get_lines(): $str is "XXX.XX.XX.X Requested action not taken: too many emails per second "
      SMTP -> get_lines(): $data is "XXX.XX.XX.X Requested action not taken: too many emails per second "
      SMTP -> FROM SERVER:XXX.XX.XX.X Requested action not taken: too many emails per second
      SMTP -> ERROR: DATA command not accepted from server: 550 5.7.0 Requested action not taken: too many emails per second
      ...
      

      这样我就知道确切的问题是什么了。

      【讨论】:

        【解决方案10】:

        我遇到了同样的问题。在我的实例中,发送邮件超时,因为我的 Exchange 服务器正在将电子邮件中继到 Internet 上的服务器。该服务器已超出其带宽配额。显然 php mailer 有一些内置的超时时间,它还不足以看到实际的消息。

        【讨论】:

          【解决方案11】:

          我们通过 Gmail SMTP 服务器发送电子邮件,有时当我们达到 Gmail 发送限制时,我们会从 PHPMailer 收到这个确切的错误。

          您可以通过进入 Gmail 并尝试手动发送电子邮件来检查是否发生了同样的事情。在我们的例子中,它显示了有关发送限制的更有用的错误消息。

          https://support.google.com/a/answer/166852?hl=en

          【讨论】:

            【解决方案12】:

            在我的 cpanel 中,我有“注册邮件 ID”选项,我在其中添加了我的电子邮件地址,30 分钟后它可以与简单的 php 邮件功能正常工作。

            【讨论】:

              【解决方案13】:

              如果您使用的是 Office 365 SMTP 网关,则显示“SMTP 错误:数据未接受”。是邮箱已满时您将收到的回复(即使您只是从邮箱发送)。

              尝试从邮箱中删除一些邮件。

              【讨论】:

                【解决方案14】:

                就我而言,问题在于邮件的内容。当我将内容更改为没有 HTML 的更简单的内容时,它起作用了。但是更新phpmailer后一切都解决了。

                【讨论】:

                  【解决方案15】:

                  在我的例子中,我使用的是 AWS SES,我必须同时验证“FromEmail”和“Recipient”。完成后,我可以毫无问题地发送。

                  【讨论】:

                    【解决方案16】:

                    Mailgun sanbox 错误

                    通过$PHPMailer-&gt;SMTPDebug = true;,我发现在使用 mailgun 沙箱域时,必须将电子邮件添加到授权收件人列表(位于沙箱域概述的右侧面板上)

                    【讨论】:

                      猜你喜欢
                      • 2016-10-22
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-04-22
                      • 1970-01-01
                      • 2017-10-15
                      • 1970-01-01
                      • 2017-01-19
                      相关资源
                      最近更新 更多