php - 如何正确延迟laravel中的每100封邮件
问题描述
如果我有 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
批量将延迟 1 小时 + 秒,从 1 到 100;
或另一种解决方案使用--sleep=3
参数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++;
}
推荐阅读
- python - Python如何将字典与范围合并?
- excel - Excel 公式在单元格格式更改为“文本”之前不会返回结果
- python - dict.__setitem__(key, x) 是否比 dict[key] = x 慢(或快),为什么?
- flutter - Flutter - 值正在更新,但如果状态不再起作用
- ffmpeg - 如何使用 RTMPS 协议从 URI 获取实时流媒体
- python - 将数据框附加到同一个工作表
- javascript - 如何将 javascript 地图对象的内容呈现为列表?
- android - 在移动设备上运行时将 mysql db 与 Android 连接时出错
- azure-devops - 如何使用本地代理在 Azure DevOps Server 2020 中的给定构建代理处对 YAML 构建进行排队?
- vuejs3 - 如何在 vue3 中访问 slot 动态组件?