今天要用到后台使用队列发送邮件,于是又稍微去了解了下Laravel中使用队列。其实在最开始用Laravel写博客【 https://www.misiyu.cn 】已经了解过了,但当时既不知其然,更不知其所以然。
代码是真的写得一团糟,当然,博客是我第一次使用Laravel写一个完整的、稍微大型点的系统。并且但是对于Laravel的很多东西都不熟悉,不理解。
到了如今手里的项目,已经是第三个了,总算感觉明白Laravel是 优雅在哪个地方了。
队列形式
步骤:
app/jobs
目录下就有一个类了,该类有一个handle方法,该方法就是具体要在队列中处理的任务逻辑app/mail
目录下有一个SendReportReply
类,后面的参数--markdown=mails.ReportReply
是说该邮件内容是md格式编写,由Laravel解析成htmlSendEmail
)类的handle方法里面这样书写:
Mail::to('admin@misiyu.cn')->send(new SendReportReply());然后将该Job分配到队列中,队列分配、运行可以参考我的这篇文章:https://cloud.tencent.com/developer/article/1538361 ,其它就不多说了
使用Mail的门面集成函数
// 使用 Mail 门面的queue、later 邮件入队列,可以少生成任务类(就是app/Jobs)
// Mail 邮件入队列的 两个方法 queue 、later
Mail::to('admin@misiyu.cn')->queue(new SendReportReply());
// later 延迟发送邮件
Mail::to('admin@misiyu.cn')->later($when,new SendReportReply());
Mail有提供两个queue 和later,我们就直接将new SendReportReply()
实例分发到队列中了,也即是说,该方法不用创建一个Job类。所以我更推荐第二种方法
如果没查文档,没百度,也许不少新手就会使用第一种方法。但其实第二种方法更简单。
另外需要说的是,Mail不止有to和queue、later方法,还可以通过链式调用「to」、「cc」、「bcc」一次性指定抄送和密送收件人。
Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->send(new OrderShipped($order));
更多方法,可以参考中文文档(5.8):https://learnku.com/index.php/docs/laravel/5.8/mail/3920#sending-mail