45

我试图用 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.

我希望我解释

4

17 回答 17

60

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

于 2014-01-02T16:54:54.437 回答
16

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

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

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

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

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

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

你都准备好了。

于 2014-08-29T01:21:52.630 回答
13

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

  $email->SMTPDebug = true;
于 2016-02-04T09:46:42.220 回答
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: 

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

$mail->Timeout = 20;
于 2017-03-08T16:22:47.623 回答
5

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

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

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

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

于 2013-04-12T15:36:28.777 回答
2

我只是在使用

$mail->Body    = $message;

对于某些汇总的形式,PHP 正在返回错误:

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

我在 $mail->Body=$message 之后修复了添加此代码:

$mail->MsgHTML = $message;
$mail->AltBody = $message;
于 2018-03-22T17:00:35.910 回答
1

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

于 2014-12-05T15:06:57.547 回答
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 设置 - 最小的细节很重要。

于 2019-02-26T14:37:52.457 回答
1

首先,您最好将调试设置为 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
...

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

于 2019-05-09T11:52:32.660 回答
0

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

于 2013-11-19T02:50:17.630 回答
0

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

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

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

于 2017-07-18T06:08:53.980 回答
0

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

于 2019-02-07T13:15:21.077 回答
0

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

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

于 2019-03-06T09:06:33.223 回答
0

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

于 2019-03-07T12:32:05.553 回答
0

就我而言,我使用的是 AWS SES,我必须同时验证“FromEmail”和“Recipient”。一旦完成,我可以毫无问题地发送。

于 2020-02-05T04:04:09.533 回答
0

Mailgun sanbox 错误

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

于 2021-06-01T07:25:46.910 回答
0

当您使用stripslashes 或addslashesh 或real_escape_string 时,也会发生这种情况。

避免在电子邮件正文中使用这些内容,当您的电子邮件执行代码完成后,您可以在底部添加这些行。

于 2022-03-02T15:29:57.977 回答