$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 '
如何解决这个问题?
答案 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()。此外,平均负荷大幅下降。