當某個事件被觸發時,我基于 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('[email protected]','Example'); });}不幸的是,多個用戶多次收到相同的郵件。我無法弄清楚發生了什么:將電子郵件重定向到日志時,我按預期看到每個用戶都有一封郵件;其他所有事件都會觸發電子郵件發送給單個用戶。但是,沒有人收到來自這些事件的多封電子郵件。該應用程序使用 Sendinblue 作為外部 SMTP 服務。我得到的一些提示:每小時的郵件配額非常低 -> 收到了 3 次電子郵件(Sendinblue 上的隊列立即被填滿)每小時的郵件配額提高了 10 倍 -> Sendinblue 上不再有隊列,但現在用戶收到了多達 7 次相同的電子郵件!
1 回答

慕姐4208626
TA貢獻1852條經驗 獲得超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++;
}
謝謝你的支持!
- 1 回答
- 0 關注
- 206 瀏覽
添加回答
舉報
0/150
提交
取消