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 服务。 我得到的一些提示:

显然,将电子邮件排队并设置延迟事件已解决问题。

现在每 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++;

}

感谢您的支持!