Laravel 多次发送每封电子邮件
Laravel sending each e-mail multiple times
当触发某个事件时,我基于 Laravel 的应用程序必须向邮寄列表中的每个用户发送一封交易电子邮件。
这是循环代码:
$users = User::where('notifiable', 1)->get();
foreach($users as $user) {
$info = [
'email' => $user->email,
'name' => $user->name
];
$data = [
'message' => 'Sample text'
];
Mail::send(['emails.html.notification', 'emails.text.notification',], $data, function($message) use ($info) {
$message
->to($info['email'], $info['name'])
->subject('example')
->from('admin@example.com','Example');
});
}
很遗憾,多个用户多次收到同一封邮件。
我不知道发生了什么:
- 将电子邮件重定向到日志时,我看到每个用户都收到一封邮件,正如预期的那样;
- 每隔一个事件就会触发向单个用户发送电子邮件。但是,没有人收到来自这些活动的多封电子邮件。
该应用正在使用 Sendinblue 作为外部 SMTP 服务。
我得到的一些提示:
- 每小时的邮件配额很低-> 收到了 3 次邮件(Sendinblue 上的队列立即被填满)
- 每小时邮件配额提高了 10 倍 -> Sendinblue 上不再需要排队,但现在用户最多可以收到 7 次相同的邮件!
显然,将电子邮件排队并设置延迟事件已解决问题。
现在每 10 秒请求一个新作业。
$users = User::where('notifiable', 1)->get();
$counter = 0;
foreach($users as $user) {
$payload = [
'email' => $user->email,
'name' => $user->name,
'message' => 'Sample text'
];
dispatch(new SendNotification($payload))
->delay(now()->addSeconds($counter * 10));
$counter++;
}
感谢您的支持!
当触发某个事件时,我基于 Laravel 的应用程序必须向邮寄列表中的每个用户发送一封交易电子邮件。
这是循环代码:
$users = User::where('notifiable', 1)->get();
foreach($users as $user) {
$info = [
'email' => $user->email,
'name' => $user->name
];
$data = [
'message' => 'Sample text'
];
Mail::send(['emails.html.notification', 'emails.text.notification',], $data, function($message) use ($info) {
$message
->to($info['email'], $info['name'])
->subject('example')
->from('admin@example.com','Example');
});
}
很遗憾,多个用户多次收到同一封邮件。 我不知道发生了什么:
- 将电子邮件重定向到日志时,我看到每个用户都收到一封邮件,正如预期的那样;
- 每隔一个事件就会触发向单个用户发送电子邮件。但是,没有人收到来自这些活动的多封电子邮件。
该应用正在使用 Sendinblue 作为外部 SMTP 服务。 我得到的一些提示:
- 每小时的邮件配额很低-> 收到了 3 次邮件(Sendinblue 上的队列立即被填满)
- 每小时邮件配额提高了 10 倍 -> Sendinblue 上不再需要排队,但现在用户最多可以收到 7 次相同的邮件!
显然,将电子邮件排队并设置延迟事件已解决问题。
现在每 10 秒请求一个新作业。
$users = User::where('notifiable', 1)->get();
$counter = 0;
foreach($users as $user) {
$payload = [
'email' => $user->email,
'name' => $user->name,
'message' => 'Sample text'
];
dispatch(new SendNotification($payload))
->delay(now()->addSeconds($counter * 10));
$counter++;
}
感谢您的支持!