laravel 中实现发送批量电子邮件
下面是我当前用于实现这一目标的代码,但收到 Http 错误 504,因为有 10K 用户。
public function sendNewsletter(){
$applicants = User::applicant()
->whereMailSubscription(true)
->get();
$newsletter = NewsLetter::query()->where('id',$this->id)->first();
$subject = $newsletter->subject;
$message = $newsletter->message;
foreach($applicants as $applicant){
Mail::to($applicant)->queue(new NewsLetters($applicant,$subject,$message));
}
}
您可以使用外部事务性电子邮件服务,例如Sendgrid,该服务已经开箱即用地集成到Laravel中。
您可以使用作业对邮件进行排队。这样,您就不必等待所有邮件排队。
在这种情况下,您可以使用例如php artisan make:job SendNewsletter
生成作业类,然后将上述函数中的代码粘贴到新作业类中的handle
函数中。然后在sendNewsletter
函数中,您可以简单地对作业类的新实例进行排队,例如 SendNewsletter::dispatch()
.
我还建议从users
表中"分块"您的结果,因为您将获得如此多的结果。