gpt4 book ai didi

zend-framework - 在批量邮件脚本中发送数千封电子邮件时出现 Sendmail 异常。 sendmail 是否有给定进程的电子邮件发送限制?

转载 作者:行者123 更新时间:2023-12-02 02:05:35 24 4
gpt4 key购买 nike

我对我们的 Web 服务器中的问题感到有点绝望。我们的网络是一个拥有大量用户和事件的社区。我们向用户发送他们感兴趣的事件的个性化邮件。我们在处理这些邮件的脚本中遇到问题。

我们的批量电子邮件脚本在有数千封电子邮件要发送时失败。它通常工作正常,但当它必须发送比平常更多的电子邮件(大约 25.000 封电子邮件)时,它会反复抛出异常:

Unable to send mail. mail():
Could not execute mail delivery program '/usr/sbin/sendmail -t -i '

奇怪的是,sendmail在其他进程中正常运行,例如web服务器,sendmail在PHP(Zend)中的调用方式相同。仅当大量电子邮件已无误发送时,Sendmail 才会在 PHP 群发邮件脚本中失败。 当抛出第一个异常时,对 sendmail 的下一次调用也会失败。似乎已经达到了某个队列限制,但仅限于此进程!


PHP脚本代码

PHP bulk mail scipt 主循环执行了数千次。在每个循环中,使用不同的 $email$user 调用 sendMail:

// Sometimes, hundred thousands iterations
foreach($notifications as $j => $notification){
...
$mail->setNotification($notification);
$this->sendMail($mail, $user);
...
}

$this->sendmail($mail, $user) 调用 Zend 内部方法发送邮件。它调用 PHP native 方法 mail .

/**
* Send mail using PHP native mail()
*
* @access public
* @return void
* @throws Zend_Mail_Transport_Exception if parameters is set
* but not a string
* @throws Zend_Mail_Transport_Exception on mail() failure
*/
public function _sendMail()
{
...

set_error_handler(array($this, '_handleMailErrors'));

// CALL TO MAIL PHP NATIVE METHOD
$result = mail(
$this->recipients,
$this->_mail->getSubject(),
$this->body,
$this->header,
$this->parameters);
restore_error_handler();
}

if ($this->_errstr !== null || !$result) {
/**
* @see Zend_Mail_Transport_Exception
*/
require_once 'Zend/Mail/Transport/Exception.php';

// HERE THE EXCEPTION IS THROWN
throw new Zend_Mail_Transport_Exception('Unable to send mail. ' . $this->_errstr);
}
}

处理 sendmail 运行

参见ps -aux | grep sendmail 批量邮件 scipt 正常工作时的输出

$ ps -aux | grep sendmail
root 6756 0.0 0.0 62240 2468 ? Ss 18:19 0:08 sendmail: MTA: accepting connections
root 25766 0.0 0.0 62668 3536 ? Ss 22:43 0:00 sendmail: MTA: ./r17Lh1fX025764 eml4.in.gr.: client DATA status
root 30978 0.0 0.0 62460 2876 ? Ss 22:46 0:00 sendmail: MTA: ./r17Lk8li030976 s1.m1r3.onet.pl.: user open
root 31462 0.0 0.0 62672 3536 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkSIg031460 mx2.hotmail.com.: client DATA status
root 31474 0.0 0.0 62672 3540 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkT54031472 mx2.hotmail.com.: client DATA status
root 31494 0.0 0.0 62668 4404 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkUXC031492 gmail-smtp-in.l.google.com.: client RCPT
root 31498 0.0 0.0 62668 3536 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkUn1031496 mx4.hotmail.com.: client DATA status
root 31502 0.0 0.0 62672 3536 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkUti031500 mx3.hotmail.com.: client DATA status
root 31506 0.0 0.0 62672 3500 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkUHw031504 mx4.hotmail.com.: client RCPT
root 31510 0.0 0.0 62672 3496 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkUth031508 mx3.hotmail.com.: client MAIL
root 31514 0.0 0.0 62668 4436 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkVPb031512 gmail-smtp-in.l.google.com.: client DATA status
root 31518 0.0 0.0 62460 2888 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkV9o031516 mx1.hotmail.com.: client EHLO
root 31522 0.0 0.0 62668 4404 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkVD4031520 gmail-smtp-in.l.google.com.: client RCPT
root 31526 0.0 0.0 62460 2852 ? Ss 22:46 0:00 sendmail: MTA: ./r17LkVcF031524 mx3.hotmail.com.: user open

当脚本开始抛出异常时,ps -aux | grep sendmail 输出几乎为空,正如预期的那样

$ ps -aux | grep sendmail
root 6756 0.0 0.0 62240 2468 ? Ss Feb07 0:49 sendmail: MTA: accepting connections

一些问题

我是 sendmail 的新手,所以非常感谢任何帮助。如果您需要更多信息,请告诉我。

  • 简单地说,sendmail 是如何发送邮件的?
  • sendmail 是否有发送邮件的限制(我们的服务器是专用的,托管服务提供商没有设置具体限制)?
  • sendmail 是否有任何进程队列来限制给定进程可以发送的邮件数量?
  • 百万美元的问题:为什么会抛出异常以及如何解决? :-)

预先感谢您的帮助!

最佳答案

您为每发送一封电子邮件创建一个 sendmail 进程。25_000 封电子邮件可能会创建太多进程,您的计算机无法处理。

附言您可以尝试在 news:comp.mail.sendmail 上提问 - 添加一些内容以表明这不是“垃圾邮件发送者有麻烦”的问题。

关于zend-framework - 在批量邮件脚本中发送数千封电子邮件时出现 Sendmail 异常。 sendmail 是否有给定进程的电子邮件发送限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15223653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com