laravel邮件发送以及队列方式发送
前言
这几天在弄四六级准考证查询升级版2.0版,添加邮件推送的功能。按照官方文档一步一步弄下来也还OK,遇到的坑也不多吧。
实现方法
这里采用Mailables方式发送,也即是发邮件逻辑都将单独使用一个PHP类实现,每个发邮件事件对应一个类,并且对外只有提供一个简单的 send 语法,你只要将对应的 email 实例传入即可实现发邮件功能。
# IndexController文件中一个Index方法
Mail::to($email)->send(new SendEmail); //$email是收件人邮箱 new SendEmail单独发送邮件一个PHP类
# 创建 SendEmail 这个PHP类
php artisan make:mail SendEmail
# 在app/Mail/中出现SendEmail,其中里面build()就是我们需要实现逻辑的地方
可以设置邮件主题,作者,模板等等,下面我就举一个例子
return $this->from('icharle@live.com', '邮件测试')view('Email.Score')->subject('邮件测试');
队列推送方式
我们都知道发送邮件是一个比较耗时的任务,而且对于批量发送的话,如果不采用队列的方式对于服务器消耗是很大的,而且很大可能任务执行未完成就已经超过最大任务执行时间,所以很有必要实现队列。队列方式有官方支持好几个,这里就采用redis
为驱动的队列。
# 首先配置.env文件
QUEUE_DRIVER=redis
# 添加Jobs队列类
php artisan make:job SendEmail
# 在app/Jobs文件出现SendEmail.php文件
里边的handle方法就是我们需要实现业务逻辑的地方,比如发送邮件,
我们就把IndexController文件中一个Index方法写到这里
Mail::to($email)->send(new SendEmail); //$email可以是Index方法中出来的参数
# 然后修改IndexController中Index方法
SendEmail::dispatch(); //推送队列
# 运行队列监听
php artisan queue:work --daemon
# 几个有关php artisan queue:
queue:work 默认只执行一次队列请求, 当请求执行完成后就终止;
queue:listen 监听队列请求,只要运行着,就能一直接受请求,除非手动终止,更多的用于调试阶段;
queue:work --daemon 同listen一样,不同的是work不需要再次加载框架,直接运行任务,一般推荐使用这个来处理队列监听。
简单的队列应用大概这样,更多的详细用法看官方文档。
参考文章Laravel 队列发送邮件