关于Laravel使用队列后台发送邮件

无道 2019-10-25 0 条评论 编程相关 阅读44 手机阅读

今天要用到后台使用队列发送邮件,于是又稍微去了解了下Laravel中使用队列。其实在最开始用Laravel写博客【 https://www.misiyu.cn 】已经了解过了,但当时既不知其然,更不知其所以然。

代码是真的写得一团糟,当然,博客是我第一次使用Laravel写一个完整的、稍微大型点的系统。并且但是对于Laravel的很多东西都不熟悉,不理解。

到了如今手里的项目,已经是第三个了,总算感觉明白Laravel是 优雅在哪个地方了。

正题

方法一

队列形式

步骤:

  • 该方法需要先创建一个job

    php artisan make:job SendEmail

    然后在app/jobs目录下就有一个类了,该类有一个handle方法,该方法就是具体要在队列中处理的任务逻辑

    截图-1572005468

  • 创建一个邮件类

    php artisan make:mail SendReportReply --markdown=mails.ReportReply

    该类会在app/mail目录下有一个SendReportReply类,后面的参数--markdown=mails.ReportReply是说该邮件内容是md格式编写,由Laravel解析成html

  • 然后我们需要怎样把邮件添加到队列呢?

    我们需要在Job(SendEmail)类的handle方法里面这样书写:

    Mail::to('admin@misiyu.cn')->send(new SendReportReply());

    截图-1572005603

    然后将该Job分配到队列中,队列分配、运行可以参考我的这篇文章:https://www.misiyu.cn/article/113.html ,其它就不多说了

  • 关于队列分配我想强调的一点,有两种方法,都是一样的

    // 使用dispatch() 帮助函数,该函数需要一个任务类的实例对象
    dispatch(new SendEmail())
    // 或者 $this->dispatch() 该方法在控制器中被定义,和dispatch帮助函数的使用一致
    $this->dispatch(new SendEmail())

方法二

使用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

全文完 [
有帮助?打赏
支付宝打赏
微信打赏
]
修改: 10月26日 18:50
这篇文章还没有评论呢~
点击刷新/生成验证码