我一直在试图对这个问题进行排序......任何线索都会非常感激。
我在运行exim的Ubuntu 12.04服务器上通过PHPMailers SMTP本地发送邮件。如果我只发送10条消息,一切正常。但是,如果我排队说出260多条消息并尝试一个接一个地发送它们,我可以保证其中约30个将与该行一起返回:
MAIL not accepted from server
他们都去了同一个地址(另外230个成功地在那里)我可以看到exim中的队列有时运行,所以可能导致这个以及为什么不会发生这种错误我刚刚使用'邮件'命令?
提前致谢。
本
P.S:我没有使用mail命令,因为我实际上是从SMTP输出中提取消息ID
更新
我已经在PHPMailers class.smtp.php文件中进行了一些挖掘,并在Mail函数中添加了一个或两个var_dump,我也将调试级别提升到4(这样我就可以看到每个SMTP响应)。似乎$this->getLines()
函数正在从套接字中读取一个空行... class.smtp.php正在解释(可能是错误的)然后挽救。这是一个有效的回应吗?为什么telnet什么都不返回..?
答案 0 :(得分:0)
你试过睡觉吗(1);邮件之间的延迟?您可以在一定时间内发送的邮件数量有限制。
检查错误发生的时间,脚本运行了多长时间?似乎邮件服务器登录时间到期。将电子邮件分成较小的金额,并在20个左右发送电子邮件后进行新的登录。
答案 1 :(得分:0)
您收到的错误应该提供更多信息,例如
ERROR: MAIL not accepted from server: 550 Tarpit active for...
或类似的东西。消息的第二部分应该告诉您错误是什么。否则,您应该能够在邮件日志消息中看到原因 - / var / log / messages,/ var / log / mail *等。
更新:这就是我说的原因:
if($code != 250) {
$this->error =
array("error" => "MAIL not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br />';
}
return false;
}
...所以错误应该包括SMTP代码和/或消息,而不仅仅是“MAIL不能从服务器接受”。
无论如何,错误的原因应该由服务器记录,并且可以在/ var / log / exim4 / rejectlog或/ var / log / exim4 / mainlog等中使用。
答案 2 :(得分:0)
我在1天前与PHPMailer类有同样的问题,我收到错误消息:MAIL not accepted from server:
没有进一步的错误细节。我有一个简单的解决方案,我在SetFrom("my@email.com", "My Name")
之前做Send()
并且它有效。我想这是关于SMTP服务器,它需要一个'FROM'标题来通过SMTP服务器发送。我希望对于那些可能会遇到这个问题且对我有同样问题的人来说,这会很有用。