我试图找出这个问题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.
我希望我解释
答案 0 :(得分:39)
您的服务器不允许使用不同的发件人和用户名
你应该配置:$mail->From
,如$mail->Username
答案 1 :(得分:13)
对于与PHP Sailer一起使用Amazon SES的AWS用户,当您的“发件人”邮件发件人不是经过验证的发件人时,也会出现此错误。
添加经过验证的发件人:
登录您的Amazon AWS控制台:https://console.aws.amazon.com
从可用的AWS应用程序列表中选择“Amazon SES”
在“已验证的发件人”下选择“电子邮件地址” - &gt; “验证新电子邮件地址”
导航至该新发件人的电子邮件,点击确认电子邮件的链接。
你们都已经准备好了。
答案 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并尝试手动发送电子邮件来检查是否发生了同样的事情。在我们的情况下,显示有关发送限制的更有用的错误消息。
答案 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)
使用 $PHPMailer->SMTPDebug = true;
我发现在使用 mailgun 沙盒域时,必须将电子邮件添加到授权收件人列表(位于沙盒域概览的右侧面板上)