无法执行邮件传递程序

时间:2012-12-08 23:10:01

标签: php codeigniter phpmailer

$this->load->model('emailmodel');
$query = $this->emailmodel->get_emails();
$emails = array();
set_time_limit(0);

foreach($query->result() as $u)
{
    $this->notification->send($u->to, $this->config->item('neworder'),'orders/mail/subscription', 
        array(
            'order' => $neworder,
            'user' => $user
        ));
    break;
}

所以我在每个订阅用户的循环中发送邮件,但它给了我一个错误:

Could not execute mail delivery program '/usr/sbin/sendmail -t -i '

如何解决这个问题?

5 个答案:

答案 0 :(得分:2)

我认为您的系统不支持该路径中的sendmail ..您必须更改sendmail路径或重新安装它,并确保您的队列邮件不会超载......

答案 1 :(得分:1)

我们遇到了同样的问题。 请检查系统的安全限制(ulimit)

您可以执行 ulimit -a

  

bash #ulimit -a

     

...
  打开文件(-n)1024
  最大用户进程(-u)1024
  ...

您可以在 /etc/security/limits.conf 中的RedHat上更改此内容 我们已将nproc和nofile更改为更大的值。

因为每个mail()调用都会打开一个端口(文件)。如果您到达Filelimit,则会发生此错误消息。

答案 2 :(得分:0)

我们也突然出现了这个奇怪的错误。重新启动php-fpm清除了我们的问题。它可能是由于我的最大文件数或其他一些内存泄漏类型的问题。为了防止再次发生这种情况,我启用了pm.max_requests = 200,以便更频繁地循环php-fpm进程。

答案 3 :(得分:0)

在我的情况下,该网站托管在MediaTemple上,它似乎是PHP版本。该站点在5.3 FastCGI上运行,当我切换到5.3 CGI时,它工作正常。

答案 4 :(得分:0)

此处发送超过50,000封电子邮件(1.1GB数据)的情况相同。

我使用了一个简单的脚本,用“select * from email_queue”读取所有内容,并将其传递给mysqli_fetch_assoc()循环中的mail()。 cronjob多年来一直顺利运行,但不是最后一次。

这里的解决方案是只发送一个“来自email_queue的select id”,然后用另一个“select * ...”读取循环中的记录并将其传递给mail()。此外,平均负荷大幅下降。