我们正在尝试使用 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/