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

nit*_*dar 4 email laravel

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

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

Ada*_*ski 6

为了进行Laravel 5/6完整排队,您需要执行以下步骤:

  1. php artisan queue:table (工作)
  2. php artisan queue:failed-table (对于失败的工作)
  3. php artisan migrate
  4. 设置为.env QUEUE_DRIVER=database
  5. 火: php artisan config:cache
  6. 火灾排队:(php artisan queue:work database --tries=1在所有未完成的尝试之后,它将注册在失败的作业表中)

由于发送电子邮件会大大延长应用程序的响应时间,因此许多开发人员选择将电子邮件排入队列以进行后台发送。Laravel使用其内置的统一队列API使此操作变得容易。要对邮件进行排队,请在指定邮件的收件人之后使用Mail Facade上的queue方法:

Mail::to($request->user())
    ->cc($moreUsers)
    ->bcc($evenMoreUsers)
    ->queue(new OrderShipped($order));
Run Code Online (Sandbox Code Playgroud)

此方法将自动处理将作业推送到队列,以便在后台发送消息。当然,在使用此功能之前,您将需要配置队列。

如果您希望延迟发送排队的电子邮件,则可以使用后面的方法。作为第一个参数,后一种方法接受DateTime实例,该实例指示何时发送消息:

$when = now()->addMinutes(10);

Mail::to($request->user())
    ->cc($moreUsers)
    ->bcc($evenMoreUsers)
    ->later($when, new OrderShipped($order));
Run Code Online (Sandbox Code Playgroud)

如果您有希望始终排队的可邮件类,则可以在该类上实现ShouldQueue契约。现在,即使您在邮寄时调用send方法,由于可实现的协定,可邮寄邮件仍将排队:

use Illuminate\Contracts\Queue\ShouldQueue;

class OrderShipped extends Mailable implements ShouldQueue
{
    //
}
Run Code Online (Sandbox Code Playgroud)

  • 从Laravel Doc逐字复制?真是太好了吗?如果您复制/粘贴,至少应指出来源。https://laravel.com/docs/5.8/mail (3认同)
  • 我知道这是复制粘贴,但仅显示摘要确实很不错 (3认同)