2014-10-30 137 views
0

我试图发送多个邮件与队列(beanstalkd)。我的应用程序发送一些电子邮件,然后收到超时异常。发送海量电子邮件 - 超时异常

foreach ($emails as $e) { 
     Mail::queue('emails.invite', ["username" => Auth::user()->username, "grupa" => $naziv, "id" => $id, "email" => $e], function($message) use ($e){   
      $message->to($e)->subject("Pridruži nam se!"); 
     }); 
    } 

有没有办法让所有电子邮件排队,所以当系统可用时,应发送电子邮件。

编辑:超时异常完整信息:

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Maximum execution time of 30 seconds exceeded","file":"\/home\/forge\/default\/vendor\/nikic\/php-parser\/lib\/PHPParser\/NodeAbstract.php","line":110}} 
+0

请发布确切的异常。 – Bogdan 2014-10-30 20:20:07

+0

@Bogdan我编辑了我的问题,并包含完整的错误消息 – Alen 2014-10-30 20:27:22

回答

1

你怎么样呢?如果您正在使用beanstalk(或任何队列),那么您正在从应用程序(生产者,发送到队列)以及从队列中消耗数据并发送电子邮件的工作进程执行一些操作。

制片人只是把电子邮件变成魔豆,所以容易...

消费者应该是一个长期运行的进程,它应该从CLI中被执行,没有最大时间执行(你必须调整的PHP .ini of php-cli)。在循环中,您应该检查队列中是否有新内容并发送电子邮件。

基本上,听起来像你的问题是,消费者部分有最大的执行时间设置,所以它不能在X秒后在while循环中消耗电子邮件。调整并确保没有限制。

+0

是的我正在使用豆茎。使用队列发送电子邮件不应该花费那么长时间。 – Alen 2014-10-31 12:06:57

+0

如果这个过程是一个长期运行的过程(假设有一段时间(真)),那么在30秒后,它会简单地崩溃,当然......你的消费者是怎么写的? – 2014-10-31 14:36:58

+0

感谢您的帮助,我开始为此使用MailChimp并且它工作正常。 – Alen 2014-10-31 15:47:58