【问题标题】:How to send news letters in zend如何在zend中发送新闻信
【发布时间】:2011-02-10 17:12:18
【问题描述】:

我正在尝试通过 Zend_Mail 发送类似新闻信的内容,但在 12 封邮件后我收到了这条消息

致命错误:C:\Program Files\Zend\Apache2\htdocs\forga\library\Zend\Mail\Protocol\Abstract.php 第 321 行的最大执行时间超过 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);
}

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    根据您得到的脚本超时,我假设您的主机发送电子邮件的速度很慢,并且根本无法处理批量发送电子邮件。您可以使用

    增加脚本超时的时间

    一种更优雅的方式是在不同的进程中异步发送电子邮件。看看

    第 3 部分专门处理电子邮件。

    【讨论】:

      【解决方案2】:

      查看我对 PHP Multithreading/Parallel Processing in PHP 并行处理的另一篇帖子的回答。我认为这是相关的。如果您需要在单个请求之外完成某些操作,则可能应该将其传递给某种队列。

      【讨论】:

        【解决方案3】:

        您自己管理网络服务器吗?
        直到版本 5.3.0,set_time_limit() 仅适用于 safe mode。 (在最近的 PHP 中已弃用)。
        你可以在php.ini中设置safe mode

        另见max_execution_timephp.ini

        【讨论】:

          【解决方案4】:

          根据您的代码外观,您从服务器上分别向每个人发送一封电子邮件。尝试执行以下操作。

          $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);
          

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

          问候

          【讨论】:

            猜你喜欢
            • 2014-01-18
            • 1970-01-01
            • 2010-11-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-04
            • 2022-01-19
            • 2011-02-03
            相关资源
            最近更新 更多