php - 使用 Laravel 队列发送批量电子邮件

标签 php laravel queue bulk-email

我们正在尝试使用 PHP Laravel 框架发送批量电子邮件 (100k)。哪种方式是使用 Laravel 队列发送批量电子邮件的正确方法?

情况1。

//controller
public function runQueue(){    
    dispatch(new ShootEmailJob());
}

//job 
public function handle(){
        $emails = EmailList::get(['email']);

        foreach($emails as $email){
            Mail::to($email)->send();
        }
 }

案例 2。
//controller
public function runQueue(){

    $emailList = EmailList::get(['email']);

    foreach($emailList as $emailAddress){
        dispatch(new ShootEmailJob($emailAddress->email));
    }
}

//job    
 public function handle(){
    Mail::to($emailAddress)->send(new ShootMail($emailAddress));
 }

哪个是正确的方法案例 1 或案例 2?

最佳答案

第一方法将首先获取所有电子邮件,然后将它们一个接一个地发送到一个作为后台进程运行的作业的“实例”中,如果你排队的话。

第二个方法将运行 n作业的“实例”,后台进程中的每封电子邮件一个。

所以性能方面的选择 1是更好的方法。您也可以将其包装在 try - catch 中在异常情况下阻止,以便在其中一封电子邮件失败时作业不会失败,例如:

try {

     $emails = EmailList::get(['email']);

    foreach($emails as $email){
        Mail::to($email)->send();
    }

} catch (\Exception $e) {
   // Log error
   // Flag email for retry
   continue;
}

关于php - 使用 Laravel 队列发送批量电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53281802/

相关文章:

php - 如何为控制台命令创建监听器

c++ - 使用 STL 输出二进制缓冲区

用于检查 Linux 进程是否处于事件状态的 PHP 脚本

php - 无法再访问 WordPress 管理面板

php - 将 PHP 数组存储在 MySQL 中

php - 使用 Laravel 和 Eloquent 查询创建可过滤列表

Laravel:拒绝路由未定义但存在于 web.php 中

c - 为什么使用此代码中的 "LD_QUEUE_AVAILABLE"状态

c - 队列初始化功能不起作用

php - 将 slider 中的缩略图链接到主显示图像并正确弹出