我正在尝试发送新闻信件来自Zend_Mail,但在12封邮件后我收到此消息
致命错误:第321行的C:\ Program Files \ Zend \ Apache2 \ htdocs \ forga \ library \ Zend \ Mail \ Protocol \ Abstract.php超出了30秒的最长执行时间
我的代码就像:
$smtpHost = 'smtp.gmail.com';
$smtpConf = array(
'auth' => 'login',
'ssl' => 'tls',
'port' => '587',
'username' =>'xxxxx@xxxxx.com',
'password' => 'xxxxxxxx'
);
$transport = new Zend_Mail_Transport_Smtp($smtpHost, $smtpConf);
foreach($users as $user)
{
$mail = new Zend_Mail();
$mail->setFrom("noreply@forga.com", 'Forga');
$mail->setSubject($subject);
if($html=='on')
$mail->setBodyHtml($message);
else
$mail->setBodyText($message);
$mail->addto($user);
$transport->send($mail);
}
答案 0 :(得分:1)
从脚本超时开始,我认为你的主机发送电子邮件的速度很慢,而且根本无法处理电子邮件的批量发送。您可以使用
增加脚本超时的时间set_time_limit
- 限制最长执行时间更优雅的方式是将eMails异步发送到不同的进程中。看看
第3部分具体涉及电子邮件。
答案 1 :(得分:0)
查看我在PHP Multithreading/Parallel Processing in PHP中关于并行处理的另一篇帖子的答案。我认为这是相关的。如果您需要在单个请求之外完成某些操作,则应将其传递给某种队列。
答案 2 :(得分:0)
您自己管理网络服务器吗?
在版本5.3.0之前,set_time_limit()
仅适用于safe mode。 (在最近的PHP中弃用)
您可以在php.ini
中设置safe mode。
另请参阅php.ini
中的max_execution_time
。
答案 3 :(得分:0)
根据代码的外观,您可以从服务器单独向每个代码发送一封电子邮件。尝试执行以下操作。
$smtpHost = 'smtp.gmail.com';
$smtpConf = array(
'auth' => 'login',
'ssl' => 'tls',
'port' => '587',
'username' =>'xxxxx@xxxxx.com',
'password' => 'xxxxxxxx'
);
$transport = new Zend_Mail_Transport_Smtp($smtpHost, $smtpConf);
$mail = new Zend_Mail();
$mail->setFrom("noreply@forga.com", 'Forga');
$mail->setSubject($subject);
$html=='on' ?$mail->setBodyHtml($message) : $mail->setBodyText($message);
foreach($users as $user)
{
$mail->addto($user);
}
$transport->send($mail);
不,我可能确实错了,因为其他电子邮件地址可能对所有收件人都可见,我不确定这是否只是电子邮件的相关部分。
此致