首页 > 技术笔记 > php > Laravel 5.1 之美:使用队列实现邮件发送
2015
11-27

Laravel 5.1 之美:使用队列实现邮件发送

一、邮件配置

为了使用Laravel 5.1的邮件功能,我们需要先进行一些设置。配置也很简单,可以直接在.env文件中进行配置。如下是默认配置: 可以看到,设置是非常的简单。

1.配置Gmail

如果你想配置gmail邮箱,首先你需要修改config/mail.php文件如下: 这是设置邮件发送邮箱的邮件地址和名称,接下来,需要编辑.env文件,替换USERNAME, PASSWORD, FROM等等成为你自己的设置。 下一部分结束之后会介绍如何来对邮件进行测试。

2.配置Mailgun

另外一种比较流行的方式是使用Mailgun来发送邮件,它每个月可以免费发送10000封邮件,超出后每20封邮件需要1便士。 使用mailgun修改config/services.php文件,如果没有可以自己创建,修改以下内容: 这样我们设置成读取.env文件的配置,接下来由于mailgun依赖Guzzle Http,所以需要使用composer来安装它。 最后,我们来编辑.env文件,修改和添加以下内容。 使用mailgun的好处是通过第三方的API来发送邮件,这样比SMTP速度要快一点。

3.测试邮件服务

Laravel的邮件是通过一个视图来发送邮件,所以我们需要创建一个简单的测试视图。 创建resources/views/emails文件夹,并在里面创建test.blade.php文件,内容如下: 然后我们用artisan tinker命令来发送一封邮件给我们自己,进行测试。 第一个参数是视图,第二个参数是一个数组,内容是视图中需要数据。第三个参数是一个闭包,用来处理邮件的信息。在这里我们只设置了 收件人邮箱地址和邮件主题。在这个闭包中你可以做很多事情,下面是其中一些:
  • ->from($address, $name = null) – 添加邮件作者
  • ->sender($address, $name = null) – 设置邮件发送者
  • ->to($address, $name = null) – 收件人邮箱地址和昵称
  • ->cc($address, $name = null) – 添加抄送邮箱
  • ->bcc($address, $name = null) – 添加秘密抄送
  • ->replyTo($address, $name = null) – 添加回复地址
  • ->subject($subject) – 设置邮件主题
  • ->attach($file, array $options = []) – 添加附件
上面的测试例子使用Gmail的设置,返回1代表成功。如果你使用的mailgun,则返回值可能不同。

二、关于队列

1.队列如何运行

发送电子邮件消息会大幅延长应用程序的响应时间,因此许多开发者选择将邮件消息加入队列并于后台发送。队列很容易理解,一个Web请求在控制器处理过程中将内容添加到队列中,然后返回响应。然后再后台来逐个读取和处理队列中的内容。

2.修改

使用队列来发送邮件就需要对发送的方法做一些修改:将Mail::send()修改为Mail::queue()

3. 运行queue:work

要处理队列中的项目,我们就需要手动运行queue:work命令,如果队列为空,那么这个队列什么都不会做,如果队列中有东西,救助个尝试着执行它。 正如你看到的运行后它开始处理排队的邮件消息,现在你应该可以搜到一封邮件了吧。

三、自动处理队列

当然,让我们每次都要登录服务器然后来运行queue:work来处理队列是不可能的,我们可以这样做: 一种方法是在服务器启动时就运行artisan queue:listen命令,在队列中有内容时这个命令会自动调用artisan queue:work。这种方法经常发生问题导致queue:listen命令挂起,最好的方法使用supervisord运行queue:listen

1.使用supervisord运行queue:listen

supervisord是一个*nix中用来监控进程的工具,我们不研究如何来安装它,暂时只说怎么用,下面是/etc/supervisord.conf生效的一部分内容。 当然你需要把/PATH/TO替换成你自己的地址。

2. 使用定时命令

另一种方式是使用定时命令,每分钟或者每5分钟执行一次queue:work命令,这里最好使用Laravel 5.1的定时调用。 编辑app/Console/Kernel.php文件。 这样queue命令就会每分钟运行一次,当然你也可以修改成很多形式: 接下来就需要设置你机器的crontab,编辑crontab并添加以下行:  
最后编辑:
作者:射雕天龙
转载请注明:转载自射雕天龙的博客(http://blog.wangjunfeng.com)
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

Laravel 5.1 之美:使用队列实现邮件发送》有 1 条评论

  1. 好文章 说:

    过来看看、支持一下

留下一个回复

你的email不会被公开。