如何在zend中发送新闻信件

时间:2010-04-21 17:08:51

标签: php zend-framework

我正在尝试发送新闻信件来自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);
}

4 个答案:

答案 0 :(得分:1)

从脚本超时开始,我认为你的主机发送电子邮件的速度很慢,而且根本无法处理电子邮件的批量发送。您可以使用

增加脚本超时的时间

更优雅的方式是将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);

不,我可能确实错了,因为其他电子邮件地址可能对所有收件人都可见,我不确定这是否只是电子邮件的相关部分。

此致