Lumen/Laravel 5 使用网易邮箱 SMTP 发送邮件

Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发。

Laravel 邮件发送服务基于 Symfony 组件Swift Mailer

本文记录了在 Lumen / Laravel 5 环境中,使用网易邮箱 SMTP 发送邮件的主要步骤,希望对大家有一些参考价值。

获取网易邮箱的服务器和授权码:

获取服务器地址:

点击【设置】 > 【POP3/SMTP/IMAP】选项:

可以查看到,服务器地址:

获取客户端授权密码:

授权码

授权码是用于登录第三方邮件客户端的专用密码。适用于登录以下服务: POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。

点击【设置】>【客户端授权密码】

点击【开启】, 设置一个授权码, 比如本例中将授权码设置为:wang123net

配置 env 文件:

Laravel/Lumen的系统配置一般都配置项目根目录的 “.env” 文件中。

打开配置文件“.env”文件,新增以下配置:

添加发邮件模块

Laravel 框架已经包含了邮件模块,不需要安装。

由于 Lumen 是简化版的 Laravel, 需要添加 illuminate/mail 模块:

执行 “composer require” 命令, 安装illuminate/mail模块。

或者,修改composer.json 文件中 require 部分,再执行 composer up 安装,文件 composer.json 的 require 部分配置如下:

需要增加 mail.php 配置文件:

确保 Laravel、 Luemn 项目中存在 app/config/mail.php 配置文件。

Laravel 框架已经包含了此配置文件,不需新增。Lumen 项目可能不存在,需要从 Laravel 代码中复制一份, 或者直接copy一下配置代码:

创建发邮件脚本

可以使用 php artisan 命令创建脚本文件:

该命令会在自动创建一个类名为 “SendEmailCommand” 的脚本文件。

其路径是: app/Console/Command/SendMailCommand.php

打开文件,引入门面 (facade), 使用方法发送邮件:

其代码内容如下:

注册脚本

手动将脚本文件加入到 app/Console/Kernel.php中:

在 Laravel 5.5以上版本中,已默认注册了所有 Commands 目录下的脚步文件了,不需要再手动添加在 Kernel.php 中了:

执行发邮件操作

使用php artisan命令可以查看目前可用的脚本列表, 可以看到我们新加的脚本命令 “test:send-mail”:

$ php artisan

test

test:send-mail SendMail:测试邮件发送

执行发送邮件脚本:

不出意外的话,邮件发送成功。

查看发件人的发件箱,或者查看收件人的收件箱,确认一下吧。

模板邮件

上边我们发送的是纯文本的邮件,但是我们常用的都是带有模板的邮件。

app/resources/views目录下, 创建一个 emails 目录,创建一个 test.blade.php 邮件模板文件:

使用 Mail::send() 方法发送:

常见的报错

这里收集了一些常见的错误,可能不同的 Laravel 版本,提示信息略有不同。

报错1: 没有正常设置配置文件,报530错误 (Lavavel5.5):

报错2: 授权码认证失败:

授权码错误 (Lavavel5.5):

不填授权码 MAIL_PASSWORD 或者 MAIL_PASSWORD 错误 (Lavavel5.4):

注意 MAIL_PASSWORD 不是邮箱的密码,而是授权码。

报错3: 邮件地址 MAIL_FROM_ADDRESS 必须和 MAIL_USERNAME不一致:

调试邮件:

可以在配置文件中,将邮件驱动改成MAIL_DRIVER=log, 就可以在本地日志中看到邮件内容了,这在测试的时候会很有用。

打开配置文件,修改邮件驱动为MAIL_DRIVER=log, 执行邮件发送脚本,将会把邮件发送内容保存到storage/logs/laravel.log中。

纯文本邮件实例内容如下:

拓展内容

POP3:

POP3, 全名为 “Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。

它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。

SMTP

SMTP 全称是 “Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。

IMAP

IMAP 全称是 “Internet Mail Access Protocol”,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

Swift Mailer

参考链接

https://laravel.com/docs/5.4/mail

http://laravelacademy.org/post/1986.html

http://help.163.com/10/0312/13/61J0LI3200752CLQ.html

感谢大家的阅读,如有任务意见或者建议,可以留言或者直接联系本公众号.

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180613G15YQ200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券