6
$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 '

如何解决这个问题?

4

5 回答 5

2

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

于 2013-06-20T08:33:18.500 回答
2

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

你可以执行ulimit -a

bash# ulimit -a

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

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

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

于 2014-02-25T14:33:07.890 回答
0

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

于 2014-09-18T13:35:15.470 回答
0

发送超过 50,000 封电子邮件(1.1GB 数据)的相同案例也发生在这里。

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

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

于 2017-11-09T13:23:56.017 回答
0

就我而言,该站点托管在 MediaTemple 上,它似乎是 PHP 版本。该站点在 5.3 FastCGI 上运行,当我切换到 5.3 CGI 时它运行良好。

于 2015-11-24T06:46:47.880 回答