2012-07-18 88 views
0

我一直在砸我的头试图排除这一个......任何线索将不胜感激。使用PHPMailer发送SMTP邮件,'MAIL不被服务器接受'的回应,为什么?

我在运行exim的Ubuntu 12.04服务器上通过PHPMailers SMTP类本地发送邮件。如果我只发送10条消息,一切正常。但是,如果我排队发言权260+的消息,并尝试一个送他们相继我可以保证,他们〜30将与行返回:

MAIL not accepted from server

他们都去同一个地址(另一个230成功地在那里),我可以看到有时exim中的队列正在运行,所以如果我只是使用'Mail'命令,可能会导致这种情况,为什么不会发生这种错误呢?

在此先感谢。

PS:我不使用邮件命令,因为我实际上从SMTP输出提取消息ID

UPDATE

我已经做了一些更多的挖在PHPMailers class.smtp.php文件中,并在Mail函数内添加了一个var_dump或两个,并且我也将调试级别提高到了4(以便我看到每个SMTP响应)。看起来$this->getLines()函数正在从套接字读取一个空白行...... class.smtp.php正在解释(推测不正确)然后释放。这是一个有效的回应?为什么telnet不会返回..?

+0

您是否尝试在邮件之间放置'sleep(1);'延迟?可能会限制您可以在一定时间内发送多少封邮件。 – Peon 2012-07-18 13:17:43

+0

我确实在每封邮件之后。事实上,如果我收到这条消息,我还需要额外安装一个睡眠(1)命令:( – Ben 2012-07-18 13:35:35

+0

听起来像你需要检查邮件服务器日志中正在写入的内容) – Peon 2012-07-18 16:25:50

回答

0
  1. 你试过睡觉(1);邮件之间的延迟?可能会限制您可以在一定时间内发送多少封邮件。

  2. 检查错误发生的时间,脚本运行了多长时间?似乎邮件服务器登录时间到期。将电子邮件分成较小的金额并在20个左右发送电子邮件后进行新的登录。

+0

感谢Dainis,每隔一段时间就有一次睡眠消息发送。此外,我每次都对邮件对象进行反序列化,然后发送,所以它不应该是一个连续的连接问题...... – Ben 2012-07-18 14:32:33

0

您收到的错误应该比提供的信息更丰富,

ERROR: MAIL not accepted from server: 550 Tarpit active for... 

或类似的东西。消息的第二部分应该告诉你错误是什么。否则,你应该能够看到邮件日志消息的原因 - 在/ var/log/messages中,在/ var /日志/邮件*等

UPDATE:这里就是为什么我说:

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等文件中找到。

+0

嗨isemi,事实证明'Mail no accepted'是类中的硬编码字符串。 smtp.php,我用我当前的发现更新了我的问题。谢谢 – Ben 2012-07-18 14:55:58

0

我与PHPMailer类1天前有同样的问题,我得到了错误信息:MAIL not accepted from server:没有更多的错误细节。我有一个简单的解决方案,我做SetFrom("[email protected]", "My Name")之前做Send()它是工作。我想这是关于SMTP服务器,它需要一个'FROM'头来发送通过SMTP服务器。我希望这对于可能来到这个线程并与我有同样问题的人有用。

相关问题