2019独角兽企业重金招聘Python工程师标准>>>

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

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

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

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

登录网易邮箱: http://mail.163.com/

获取服务器地址:

点击【设置】 > 【POP3/SMTP/IMAP】选项: 可以查看到,服务器地址:

POP3 服务器: pop.163.com
SMTP 服务器: smtp.163.com
IMAP 服务器: imap.163.com

获取客户端授权密码:

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

点击【设置】 > 【客户端授权密码】 点击【开启】, 设置一个授权码, 比如本例中将授权码设置为: mailPASSWORD

配置 env 文件:

Laravel/Lumen的系统配置一般都配置项目根目录的 “.env” 文件中。 打开配置文件“.env”文件,新增以下配置:

MAIL_DRIVER=smtp MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=cnwytnet@163.com
MAIL_PASSWORD=wang123net
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=cnwytnet@163.com
MAIL_FROM_NAME=cnwytnet

添加发邮件模块

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

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

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

$ composer require illuminate/mail

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

"require": {"php": ">=5.6.4","laravel/lumen-framework": "5.4.*","illuminate/mail":"5.4.*","guzzlehttp/guzzle": "~6.0"
}

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

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

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

<?phpreturn [// Mail Driver‘driver’ => env(‘MAIL_DRIVER’, ‘smtp’),//SMTP Host Address'host' => env('MAIL_HOST', 'smtp.mailgun.org'),// SMTP Host Port'port' => env('MAIL_PORT', 587),// Global "From" Address'from' => ['address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),'name' => env('MAIL_FROM_NAME', 'Example'),],// E-Mail Encryption Protocol'encryption' => env('MAIL_ENCRYPTION', 'tls'),// SMTP Server Username'username' => env('MAIL_USERNAME'),'password' => env('MAIL_PASSWORD'),// Sendmail System Path'sendmail' => '/usr/sbin/sendmail -bs',// Markdown Mail Settings'markdown' => ['theme' => 'default','paths' => [resource_path('views/vendor/mail'),],],
];

创建发邮件脚本

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

$ php artisan make:command SendEmailCommand

该命令会在自动创建一个类名为 “SendEmailCommand” 的脚本文件。 其路径是: app/Console/Command/SendMailCommand.php

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

其代码内容如下:

// 发送 纯文本邮件
Mail::raw($content, function ($message) use ($toMail, $subject) {             $message->subject($subject);             $message->to($toMail);
});

注册脚本

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

protected $commands = [         Commands\SendMailCommand::class, //测试发邮件脚本
];

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

/*** Register the commands.** @return void*/
protected function commands()
{// 加载所有 Commands 下脚本$this->load(__DIR__.'/Commands');require base_path('routes/console.php');
}

执行发邮件操作

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

$ php artisan
testtest:send-mail  SendMail:测试邮件发送

执行发送邮件脚本:

$ php artisan test:send-mail

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

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

模板邮件

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

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

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

// 邮件模板文件
$view  = 'emails.test';
// 模板展示数据
// $data  = ['content' => $content,];
$data  = ['content' => $content,'logo'    => 'https://gitee.com/phpspace/php-demo/raw/master/laravel-demo/public/static/images/qrcode_344.jpg',
];
// 添加附件
$attach = "/Users/wangtest/code/php-demo/laravel-demo/public/robots.txt";return Mail::send($view, $data, function ($message) use ($toMail, $subject, $attach) {             $message->subject($subject);             $message->to($toMail); $message->attach($attach);
});

常见的报错

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

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

In AbstractSmtpTransport.php line 419:
Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required"

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

授权码错误 (Lavavel5.5):

In AuthHandler.php line 181:
Failed to authenticate on SMTP server with username "cnwytnet@163.com" using 2 possible authenticators

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

[Swift_TransportException]
Failed to authenticate on SMTP server with username “cnwytnet@163.com” using 2 possible authenticators

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

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

[Swift_TransportException]
Expected response code 250 but got code “553”, with message “553 Mail from must equal authorized user”

调试邮件:

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

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

比如,发送纯文本邮件时,实例内容如下:

[2018-06-13 02:52:17] local.DEBUG: Message-ID: <c75569f9a301cbb32b6ef7b0b6c78d09@swift.generated>
Date: Wed, 13 Jun 2018 02:52:17 +0000
Subject: =?utf-8?Q?=5BTEST=5D=E6=B5=8B=E8=AF=95?==?utf-8?Q?=E9=82=AE=E4=BB=B6=E6=A0=87=E9=A2=98?= SendMail - 2018-06-1302:52:17
From: cnwytnet <cnwytnet@163.com>
To: wangtom365@qq.com
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printableHi, 这是一封来自Laravel的测试邮件.

具体代码可以在码云查看: https://gitee.com/phpspace/php-demo

拓展内容

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

Swift Mailer, 是由 symfony 开发的一个邮件发送类库。其网址是: swiftmailer.symfony.com。

参考链接

https://laravel.com/docs/5.4/mail
http://laravelacademy.org/post/1986.html
http://help.163.com/10/0312/13/61J0LI3200752CLQ.html

更新记录

2017/04/01 基于Lumen5.4新增文章
2016/06/13 基于Laravel5.5/5.6完善内容

转载于:https://my.oschina.net/wangyongtao/blog/1829624

Lumen / Laravel 5.5 使用网易邮箱 SMTP 发送邮件相关推荐

  1. php5.3发送邮件,Lumen / Laravel 5.5 使用网易邮箱 SMTP 发送邮件

    Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer. 本文记录了 ...

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

    Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer. 本文记录了 ...

  3. Python使用网易的SMTP发送邮件554问题的解决

    Python使用网易的SMTP发送邮件554问题的解决 \quad 最近做个Python项目,需要用到发送邮件的功能,于是使用了网易的163邮箱作为SMTP服务器主机.但在使用过程中,有时候会出现代号 ...

  4. Python 网易邮箱简单发送邮件

    import smtplib #导入PyEmail from email.mime.text import MIMETextmsg_from="130xxxxx490@163.com&quo ...

  5. Java实现QQ邮箱发送给网易邮箱,发送邮件+附件

    实现功能: Java实现 QQ邮箱 给网易邮箱发送邮件 获取邮件信息并下载邮件的附件 前置功能 案例以QQ邮箱为例说明: 首先登录QQ邮箱将SMTP服务开启,会得到一个授权码. 创建一个Springb ...

  6. 记录WordPress代码实现QQ邮箱SMTP发送邮件

    这个是QQ邮箱的其它未测试,将下面的代码添加到主题目录的functions.php文件中,就可以了,评论就有邮件回复了. add_action('phpmailer_init', 'mail_smtp ...

  7. 【计算机网络】telnet QQ邮箱smtp发送邮件

    telnet QQ邮箱 smtp邮件发送 工具 首先 如何开启telnet服务 如何开启qq邮箱的smtp服务,获得16位授权码 实现过程 几点建议 进入自己的smtp服务器 发送邮件 ------- ...

  8. mac网易邮箱smtp服务器,网易企业邮箱MAC mail客户端设置

    网易企业邮箱MAC mail客户端设置 创建邮箱,输入姓名.完整的邮件地址.密码. 点击继续,系统自动搜索邮件服务器 搜索完毕后,点击继续,设置收件服务器,帐户类型:POP描述:用户自定义,收件服务器 ...

  9. 关于C#如何利用QQ邮箱SMTP发送邮件

    今天写发送邮件的时候,用163可以正常发送,但是利用QQ发送不了邮件,后来发现是QQ邮箱的SMTP使用了SSL加密,所有必须启用SSL加密,并且指定端口就可以发送了. public void Send ...

最新文章

  1. java与SPARK的使用的一个类似文章
  2. Uva1595 对称轴
  3. 百度云怎样提升下载速度
  4. linux python软连接_Linux软链接的创建,删除,修改
  5. mysql suoyin 和锁_Mysql索引与锁
  6. Error running ‘Tomcat‘: Unable to open debugger port (127.0.0.1:2148): java.net.SocketExceptio
  7. django-模板的母版与子版
  8. 20-21-2网络管理quiz1
  9. Vbs判断两个Excel文件的内容--将两个Excel文件相同内容写入新建的Excel文件内
  10. vmcore分析和实战
  11. 软件测试-禅道下载及安装-测试人员必会工具
  12. 【老生谈算法】matlab实现信息光学夫琅禾费衍射源码——夫琅禾费衍射
  13. python网页教程_python网页教程
  14. asp.net mvc excel合并单元格_如何用Excel制作一份A4纸可直接打印的拼音田字格模版?...
  15. 制作透明背景的微信头像
  16. matlab程序阻尼牛顿法,matlab阻尼牛顿法
  17. 渐变背景怎么搞?2分钟教你制作渐变背景
  18. The POODLE attack (SSLv3 supported) 漏洞修复
  19. 注册表怎么用计算机管理打开,如何打开电脑注册表编辑器?打开注册表的几种方式介绍...
  20. 【mud】set (long格式造成的进入mud之后“你的四周灰蒙蒙地一片,什么也没有。”

热门文章

  1. FFmpeg中AVDictionary介绍
  2. 【Qt】在QtCreator中编译log4cplus
  3. 【linux】串口编程(一)——配置串口
  4. 2021北师大丰台实验高考成绩查询,2020北京丰台区中考各高中录取分数线公布
  5. cpu渲染测试软件,CineBench渲染能力测试_CPUCPU评测-中关村在线
  6. mysql表导出和导入命令行_MySQL命令行导出导入数据库和数据表-Go语言中文社区...
  7. zynqpl端时钟_第十一章 ZYNQ-MIZ701 PS读写PL端BRAM
  8. wrs-arcface虹软人脸识别
  9. git 修改标签名称_Git常用命令汇总,希望能帮到你
  10. 手把手教你架构3d游戏引擎pdf_一个在游戏行业摸爬滚打了十几年的人,为何我对这本书情有独钟...