0

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

我在运行 exim 的 Ubuntu 12.04 服务器上通过 PHPMailers SMTP 类本地发送邮件。如果我只发送 10 条消息,一切正常。但是,如果我排队说 260 多条消息并尝试一个接一个地发送它们,我可以保证其中约 30 条消息将与该行一起返回:

MAIL not accepted from server

他们都去同一个地址(其他 230 人成功到达那里),我有时可以看到 exim 中的队列正在运行,所以可能是什么原因造成的,如果我只是这样,为什么不会发生这种错误使用“邮件”命令?

提前致谢。

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

更新

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

4

3 回答 3

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 代码和/或消息,而不仅仅是“不接受来自服务器的邮件”。

无论如何,错误的原因应该已经被服务器记录了,并且可以在 /var/log/exim4/rejectlog 或 /var/log/exim4/mainlog 等中找到。

于 2012-07-18T13:44:54.000 回答
0
  1. 你试过把 sleep(1); 邮件之间的延迟?您可以在一定时间内发送多少邮件可能会有限制。

  2. 检查该错误发生的时间,脚本工作了多长时间?邮件服务器登录时间似乎已过期。将电子邮件除以较小的数量,并在发送大约 20 封电子邮件后重新登录。

于 2012-07-18T13:39:49.043 回答
0

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

于 2015-03-10T05:00:09.600 回答