https://blog.csdn.net/wulove52/article/details/71172842php
Laravel集成了SwiftMailer库进行邮件发送,邮件配置文件位于config/mail.PHP
:、python
- return [
- 'driver' => env('MAIL_DRIVER', 'smtp'),
- 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
- 'port' => env('MAIL_PORT', 587),
- 'from' => ['address' => null, 'name' => null],
- 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
- 'username' => env('MAIL_USERNAME'),
- 'password' => env('MAIL_PASSWORD'),
- 'sendmail' => '/usr/sbin/sendmail -bs',
- 'pretend' => false,
- ]
以上的参数 咱们都会有详细的讲解! 请继续往下看!linux
driver
用于配置默认的邮件发送驱动,Laravel支持多种邮件驱动方式,包括smtp
、Mailgun
、Maildrill
、Amazon SES
、mail
和sendmail
,Mailgun和Amazon SES都是收费的,Maildrill目前不支持中国区用户,这三个都是第三方邮件服务。mail
驱动使用PHP提供的mail
函数发送,sendmail
驱动经过Sendmail/Postfix(Linux)提供的命令发送邮件,smtp
驱动经过支持ESMTP的SMTP发送邮件。laravel
注:ESMTP即Extended SMTP, 是对标准 SMTP 协议进行的扩展,它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不须要验证用户账户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。swift
就目前情况来看,使用smtp
是最明智的选择,mail
不安全,sendmail
须要安装配置Sendmail/Postfix,其余要么付费要么不能用(汗!)。下面其它配置的说明都基于driver
是smtp
。安全
接下来其余的配置都好理解,host
是邮箱所在主机,好比咱们使用163邮箱,对应值是smtp.163.com
,使用QQ邮箱的话,对应值是smtp.qq.com
。服务器
port
用于配置邮箱发送服务端口号,好比通常默认值是25
,但若是设置SMTP使用SSL加密,该值为465
。闭包
from
配置项包含address
和name
,前者表示发送邮箱,后者表示发送邮件使用的用户名。composer
encryption
表示加密类型,能够设置为null
表示不使用任何加密,也能够设置为tls
/ssl
。ide
username
表示邮箱帐号,好比yaojinbu@163.com
password
表示上述邮箱登陆对应登陆密码。
sendmail
是在设置driver
为sendmail
时使用,用于指定sendmail
命令路径。
pretend
用于配置是否将邮件发送记录到日志中,默认为false
则发送邮件不记录日志,若是为true
的话只记录日志不发送邮件,这一配置在本地开发中调试时颇有用。
// 接下来咱们要作的就是要在控制器写代码了!
use Mail;
在方法中须要写如下!
public function send()
{
$name = 'vilin';
$flag = Mail::send('emails.test',['name'=>$name],function($message){
$to = '1072155122@qq.com';
$message ->to($to)->subject('测试邮件');
});
if($flag){
echo '发送邮件成功,请查收!';
}else{
echo '发送邮件失败,请重试!';
}
}
//Mail::send
须要传递三个参数,第一个是邮件视图,第二个是传入视图的数据,第三个是一个闭包,该闭包中定义了收件人、抄送人(若是有的话)、邮件主题、附件等信息。邮件的主体内容位于局部视图中,下面咱们就来定义这个局部视图,在resources/views/admin
目录下新建test.blade.php
,编辑其内容以下:
// 以上是单纯的文本发送/! 可是还不是带有图片发送的格式! 须要发送图片的格式的! 须要继续往下继续看!
图片的发送!
//这里是view成! 须要一下这么输入!
{{$name}},这是一封测试邮件
<br>
<img src="{{$message->embed($imgPath)}}">
// 图片的发送和文本的发送 没有什么其余不同的! 而是在参数后面多写了一个参数! 一个简单的图片发送的文件就行了!
$name = 'vilin';
$imgPath = 'http://laravelacademy.org/wp-statics/images/carousel/LaravelAcademy.jpg';
$flag = Mail::send('emails.test',['name'=>$name,'imgPath'=>$imgPath],function($message){
1.1 laravel发送邮件涉及的配置文件
以上是laravel发送邮件两个配置的地方,默认使用composer生成项目的时候,自动生成.env文件里会有邮箱的配置字段,以下:
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
以上这个几个字段在mail.PHP文件中都有对应的字段,若是部署上线,仅仅配置了mail.php而没有改.env文件里的配置(除非没有.env),那么邮箱是发送不成功的,由于.env文件会覆盖mail.php文件字段,切记当心。
1.2 使用QQ邮箱smtp发送邮件问题
1.2.1 开启QQ邮箱smtp和imap功能
在使用这个QQ邮箱发送以前你须要在所要发送邮箱的后台开启smtp和imap发送邮箱受权功能,不然将一直提示你没有受权。若是想要显示发送的记录,则须要设置收取选项。设置位置,直接上图:

至少你须要把POP3/SMTP服务开启,否则发邮件那是天方夜谭啊。
开启后,你还须要点击下方的:“生成受权码”,获取一个可以登陆的动态密码:

千万千万千万记得,MAIL_PASSWORD填写的并不是是发送邮箱的帐号密码,而是到腾讯邮箱管理中心受权的动态密码!!!
加密方式建议选择选择ssl保证数据安全,那么最终.env邮件长这样:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=[你的帐号]
MAIL_PASSWORD=gzoyimtltnqsbdba
MAIL_ENCRYPTION=ssl
mail.php配置文件中,你仅仅须要修改from字段
:
return [
'from' => ['address' => [MAIL_USERNAME], 'name' => '小王']
]
而后你就能够愉快大发邮件啦:
5.2 发送邮件方式
\Mail::send('mail.index', [], function ($message) { $message->to(['chengxuyuan@qq.com'])->subject('公司未婚妹子数量报表统计');});
从5.3开始,发送邮件被抽象成了一个对象,若是使用laravel 5.3尝鲜的,请移步官方最新文档: https://laravel.com/docs/5.3/mail
//代码实现例子
$data = [];
$flag = \Illuminate\Support\Facades\Mail::to('panxlmail@qq.com')->send(new \App\Mail\UserMail($data));
if($flag) {
echo '发送失败';
} else {
echo '发送成功'; }