Laravel队列以及发送邮件


1. 配置邮件

请查看这篇文章

2. 发送邮件

创建mailable对象,实际上就是一个用于管理发送邮件模板以及标题的一个管理类

php artisan make:mail OrderShipped

创建好后,在app/mail下就能找到这个类,我们主要要使用以下两个函数帮我们来

 public function __construct($user)
    {
        $this->user = $user;
    }

    public function build()
    {
        return $this->view('email.password');
    }

3. 创建队列

创建队列需要用到的数据表

php artisan queue:table

php artisan migrate

将env中的队列类型修改以下,当然还有其他队列类型,例如redis等等,但是database是最简单的一种

QUEUE_DRIVER=database

这里我们执行,在app/job下创建了一个发送邮件的队列管理类,你可以取任何名字,这里我叫做SendPixiaxiaEmail

php artisan make:job SendPixiaxiaEmail

在这里我定义了个类属性,用户在管理类实例化的时候获取到一个数据,用handle的一些操作

   protected $user;
    public function __construct($user)
    {
        $this->user = $user;
    }

    public function handle()
    {
//        to:对方的邮件地址,
//        send:第一个参数是你的邮件管理类并传入一个数据,这里我传入的是一个用户的数据,
//            第二个参数是传入一个闭包函数,主要是为了设置一个邮件的主题
        Mail::to($this->user->email)->send(new UpdatePassword($this->user),function ($message) {
        $message->subject('***会员修改密码');
        });

在我们真正的开始执行队列之前,我们还需要在命令行里开启队列,这样我们才能去监听队列任务的发生,并去执行

php artisan queue:work

如果你修改了队列的管理类代码,那么你还需要去重启才能重新生效

php artisan queue:restart

这里开始真正执行,dispatch用于分发队列任务,传入我们的user,这个user将用于刚刚在SendPixiaxiaEmail的construct中的获取的user,紧接着delay用于延迟分发,这里我就延迟了一分钟,记得引入cabbon类哦

 $data = SendPixiaxiaEmail::dispatch(User::where(['id'=>30996])->first())->delay(Carbon::now()->addMinutes(1));

注意:此时的队列虽然开启了,但是并没有持久化,也就是说当你关掉命令行时就会停止,那么我们需要linux中的一些守护进程的工具帮我们守护,以下是我看到的一个例子,可以参考
https://www.cnblogs.com/chancy/p/7644061.html

你可能感兴趣的:(Laravel队列以及发送邮件)