2014-10-30 72 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