2017-05-30 114 views
0

我試圖用Laravel的Mail facade發送電子郵件。 5.3。我正在使用我公司的本地SMTP服務器。它的速度很慢,比每秒電子郵件還要大。無論如何加快這一點?我一直在尋找一種方式來建立連接,把它打開並重新使用它,但沒有骰子。我已經觸發了這種異步,所以排隊不會有什麼大的幫助,它只會進一步推遲緩慢。Laravel Mail Facade非常緩慢地使用本地SMTP發送電子郵件

foreach($customers as $customer) { 

    //build $params, $sendTo, $subject 

    Mail::send(array('myemailview',null), $params, 
     function($message) use ($sendTo, $subject) 
     { 
      $message 
      ->to([$sendTo]) 
      ->subject($subject); 

     }); 
} 
+0

也許這是SMTP端的故意限制? – apokryfos

+0

據我所知,Laravel沒有限制。 SMTP服務器可以限制嗎?你能否分析代碼來確定掛斷的位置 - 是否需要很長時間才能建立SMTP連接,是否等待等等? – samiles

+0

當郵件服務器配置錯誤,使用不存在的反彈服務器時,郵件服務器的速度會變慢,郵件服務器會嘗試解析並在發送失敗之前不發送郵件。無論如何,這聽起來很像一個託管問題,而不是一個laravel問題。 – apokryfos

回答

0

即使使用性能最好的郵件服務器,同步發送電子郵件也會導致延遲。最重要的是你在一個循環中運行它。

首先就是排列郵件。默認的sync隊列不做任何事情,它只是正常運行作業直到完成。你需要建立一個像數據庫或redis這樣的專用隊列。然後將你的郵件推送到隊列中。僅此一項就會立即消除與你相反的所有緩慢行爲,即排隊使情況變得更糟。

其次,如果您的郵件具有相同的佈局和內容,請考慮向所有使用密送的用戶發送一封郵件。