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

时间:2013-04-08 13:14:33

标签: 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 />
';

以下是收件人邮件的数组;

$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.

我希望我解释

16 个答案:

答案 0 :(得分:39)

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

答案 1 :(得分:13)

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

添加经过验证的发件人:

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

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

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

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

  5. 你们都已经准备好了。

答案 2 :(得分:8)

有趣的是,我有同样的问题,对我来说问题是我的连接已超时。为了能够看到我的连接的更多细节,我添加了$ mail-&gt; 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: 

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

$mail->Timeout = 20;

答案 3 :(得分:6)

将phpmailer设置为在调试中工作以查看&#34; real&#34;通用邮件背后的错误&#39; SMTP错误:数据未被接受&#39;在我们的例子中,邮件中的文本触发了smtp服务器垃圾邮件过滤器。

  $email->SMTPDebug = true;

答案 4 :(得分:5)

在某个大小的消息中,当通过$ mail-&gt; Body进行设置时,它会弄乱内容。

你可以测试它,如果它适用于小信息,但是不能用于更大的(超过4-6 kB),那么这就是问题。

似乎是$ mail-&gt; Body的问题,所以你可以通过$ mail-&gt; MsgHTML($ message)手动设置HTML主体来解决这个问题。然后你可以尝试只通过$ mail-&gt; AltBody添加非html主体。

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

答案 5 :(得分:2)

我刚刚使用

$mail->Body    = $message;

对于一些混合形式,PHP返回错误:

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

我修复了在$ mail-&gt; Body = $ message:

之后添加此代码
$mail->MsgHTML = $message;
$mail->AltBody = $message;

答案 6 :(得分:1)

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

答案 7 :(得分:1)

我在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设置进行三遍检查-最小的细节计数。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

我们通过Gmail SMTP服务器发送电子邮件,当我们点击 Gmail发送限制时,我们会从PHPMailer收到此确切错误。

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

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

最好设置debug TRUE

  

$ email-> SMTPDebug = true;

或公共$ 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
...

我知道确切的问题是什么。

答案 14 :(得分:0)

就我而言,我正在使用AWS SES,并且必须同时验证“ FromEmail”和“收件人”。完成后,我可以毫无问题地发送邮件。

答案 15 :(得分:0)

Mailgun 沙箱错误

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