为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 多次发送每封电子邮件

Laravel 多次发送每封电子邮件

PHP
梦里花落0921 2022-01-24 10:43:07
当某个事件被触发时,我基于 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 次相同的电子邮件!
查看完整描述

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++;


}

谢谢你的支持!


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 184 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信