我尝试在队列中发送电子邮件,但无法正常工作。
Mail::queue('emails.mailsubscribe', ['email'=>$email],
function($message) use($email)
{
$message->to('user@xxx.in')->subject('Subscribe: XXXXX');
});
答案 0 :(得分:5)
由于发送电子邮件可以大大延长应用程序的响应时间,因此许多开发人员选择将电子邮件排队以进行后台发送。 Laravel使用其内置的统一队列API简化了这一过程。要对邮件进行排队,请在指定邮件的收件人后使用邮件外观上的队列方法:
Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->queue(new OrderShipped($order));
此方法将自动将作业推送到队列,以便在后台发送消息。当然,在使用此功能之前,您需要配置队列。
如果您希望延迟发送排队的电子邮件,可以使用更高版本的方法。作为第一个参数,后一个方法接受一个DateTime实例,指示何时应该发送消息:
$when = now()->addMinutes(10);
Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->later($when, new OrderShipped($order));
如果您希望总是排队的可邮寄课程,您可以在课程上实施ShouldQueue合同。现在,即使你在邮寄时调用send方法,mailable仍会排队,因为它实现了合同:
use Illuminate\Contracts\Queue\ShouldQueue;
class OrderShipped extends Mailable implements ShouldQueue
{
//
}