如何在laravel中适当延迟每100封邮件

Lea*_*ner 2 php 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++;
}
Run Code Online (Sandbox Code Playgroud)

我尚未对此进行测试,但我想每小时发送 100 封电子邮件,这是正确的方法吗?

Fro*_*oxz 5

sleep(1);在这里没有帮助,你的解决方案没问题,只要记住前 100 个将延迟一个小时。Laravel 文档

另外,正如您所说MailTrap,在几秒钟内只允许发送 2 封电子邮件,您可以为每封电子邮件添加几小时+几秒100,这样100批量中的每封电子邮件都会从 1 到 100 延迟 1 小时+秒;

或者另一个解决方案使用--sleep=3params in queue:work,这将处理 1 封电子邮件睡眠 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++;

}
Run Code Online (Sandbox Code Playgroud)