Когда происходит определенное событие, мое приложение на основе 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 была немедленно заполнена)
- Почасовая почтовая квота былаподнял 10x -> больше нет очередей на Sendinblue, но теперь пользователи получают одно и то же письмо до 7 раз!