如果我有 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/