php - 如何正确延迟 laravel 中的每 100 封邮件

标签 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++;
}

我还没有测试这个,但我想每小时发送 100 封电子邮件,这是正确的方法吗?

最佳答案

sleep(1); 在这里无济于事,您的解决方案没问题,请记住前 100 个将延迟一个小时。 Laravel Docs

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

或者另一种解决方案在 queue:work 中使用 --sleep=3 参数,这将处理 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++;

}

关于php - 如何正确延迟 laravel 中的每 100 封邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58087330/

相关文章:

javascript - wkhtmltoimage - 有时获取整个页面,有时不获取

php - 有没有更好的方法来插入记录?

php - fatal error : Call to undefined function UNIX_TIMESTAMP() in/

Javascript - 接收和格式化 HTML

laravel - 未定义索引 : value Quil text editor | Laravel Livewire

php - Laravel 如何使用 foreach 将数据水平放入三列

php - 使用 session 创建多页 PHP 表单

php - Laravel 自定义模型类 - 字段没有默认值

php - Laravel 双重验证正则表达式不起作用

laravel - 为什么laravel eloquent模型保存后没有id?