如何在Laravel中发送队列中的电子邮件

时间:2018-03-14 11:37:24

标签: laravel email

我尝试在队列中发送电子邮件,但无法正常工作。

   Mail::queue('emails.mailsubscribe', ['email'=>$email], 
      function($message) use($email)
    {
       $message->to('user@xxx.in')->subject('Subscribe: XXXXX');
    });

1 个答案:

答案 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
{
    //
}