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