簡體   English   中英

如何正確延遲 laravel 中的每 100 封郵件

[英]How to proper delay each 100 mails in laravel

如果我有 1000 封電子郵件,我運行的工作會遍歷這 1000 封電子郵件並發送電子郵件。

我本可以有:

$users = User::all();
$count = 0;
$hours = 0;
foreach($users as $user) {
  if($count % 100 === 0) {
    $hours++;
  }
  Main::to($user->email)->later(now()->addHours($hours), new MyEmail($user));
  $count++;
}

我還沒有對此進行測試,但我想每小時發送 100 封電子郵件,這是正確的方法嗎?

sleep(1); 在這里無濟於事,您的解決方案還可以,請記住前 100 個將延遲一個小時。 Laravel 文檔

此外,正如您所說, MailTrap在幾秒鍾內只允許 2 封電子郵件,您可以在每100封郵件中添加幾小時 + 幾秒,這樣100批中的每個 email 將從 1 到 100 延遲 1 小時 + 秒;

或其他解決方案在queue:work中使用--sleep=3參數,這將處理 1 email sleep 3 秒等。

這將在(Redis / 數據庫)中創建一個隊列,取決於您使用的內容,並將在指定的日期時間處理它們。

$users = User::all();
$count = 0;
$hours = 0;

foreach($users as $user) {

  if($count % 100 === 0) {
    $hours++;
  }

  Mail::to($user)->later(now()->addHours($hours), new MyEmail($user));
  $count++;

}

您應該使用睡眠function,使用隊列發送郵件


$users = User::all();
$count = 0;
$hours = 0;
foreach($users as $user) {
  if($count % 100 === 0) {
    $hours++;
  }
  Main::to($user->email)->later(now()->addHours($hours), new MyEmail($user));
  $count++;


  sleep(1);
}



暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM