使用PHPMailer发送SMTP邮件,';未接受来自服务器的MAIL';,为什么?


Sending SMTP messages using PHPMailer, response of 'MAIL not accepted from server', why?

我一直在努力解决这个问题。。。任何线索都将不胜感激。

我通过PHPMailers SMTP类在运行exim的Ubuntu 12.04服务器上本地发送邮件。如果我只发送10条消息,一切都很好。然而,如果我排队说260+条消息,并尝试一条接一条地发送它们,我可以保证大约30条消息将与以下行一起返回:

MAIL not accepted from server

它们都指向同一个地址(其他230个成功到达),我有时可以看到exim中的队列正在运行,那么是什么原因导致了这种情况,如果我只是使用"邮件"命令,为什么不会发生这种错误呢?

提前谢谢。

Ben

p.S:我没有使用mail命令,因为我实际上是从SMTP输出中提取消息ID

更新

我在PHPMailers class.smtp.php文件中做了更多的挖掘,在Mail函数中添加了一两个var_dump,我还将调试级别提高到了4(这样我就可以看到每个smtp响应)。似乎$this->getLines()函数正在从套接字中读取一个空行。。。哪个类.smtp.php正在解释(可能是错误的),然后退出。这是一个有效的回应吗?为什么telnet什么都不回。。?

  1. 你试着入睡了吗(1);邮件之间的延迟?在一定的时间内,你可以发送的邮件数量可能是有限制的。

  2. 检查错误发生的时间,脚本运行了多长时间?邮件服务器登录时间似乎已过期。将电子邮件分成较小的数量,在发送了20封左右的电子邮件后重新登录。

您收到的错误应该比这更具信息性,例如

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/eexim4/mainlog等中找到。

一天前,我在PHPMailer类中遇到了同样的问题,我得到了错误消息:MAIL not accepted from server:,没有进一步的错误详细信息。我有一个简单的解决方案,在做Send()之前先做SetFrom("my@email.com", "My Name"),它是有效的。我想这是关于SMTP服务器的,它需要一个"FROM"标头才能通过SMTP服务器发送。我希望它对那些可能来这个线程并对我有同样问题的人有用。

相关文章: