选择
可以选择网易163、腾讯等
1、网易163免费邮箱的smtp
服务器名:smtp.163.com
端口号:25
2、
发送
1、不使用插件
1、配置 .env MAIL_USERNAME和MAIL_FROM_ADDRESS 保持一致,MAIL_PASSWORD可以使授权码
163 ssl方式安全推荐
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=465
MAIL_USERNAME=XXXX@163.com
MAIL_PASSWORD=ls123456789
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=XXXX@163.com
MAIL_FROM_NAME=ls
163 非ssl方式
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=XXXX@163.com
MAIL_PASSWORD=ls123456789
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=XXXX@163.com
MAIL_FROM_NAME=ls
QQ邮箱ssl方式
MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=XXXX@qq.com
MAIL_PASSWORD=assiyvgeaba
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=XXXX@qq.com
MAIL_FROM_NAME=ls
2、可以发邮件了,控制器里引入:
use Illuminate\Support\Facades\Mail;
//通过邮件模板
$to = '1072155122@qq.com';
$subject = 'Welcome!';
Mail::send('mails.welcome', ['key' => 'value'], function($message) use ($to, $subject)
{
$message->to($to, 'ls')->subject($subject);
});
$name = '学院君';
Mail::send('emails.test',['name'=>$name],function($message){
$to = '1072155122@qq.com';
$message ->to($to)->subject('测试邮件');
});
if(Mail::failures()){
echo '发送邮件成功,请查收!';
}else{
echo '发送邮件失败,请重试!';
}
//更简单的纯文本邮件发送
上面的示例仅仅是发送一个字符串,对于纯文本字符串邮件发送,还有更简单的方法:
Mail::raw('这是一封测试邮件', function ($message) {
$to = '1072155122@qq.com';
$message ->to($to)->subject('测试邮件');
});
这样的话无需创建视图即可完成邮件发送。
//发送带附件的邮件(中文乱码解决)
当然,邮件内容往往不仅仅是纯文本这么简单,有时候我们会在邮件中加上附件,那么这该如何实现呢?
先上代码:
Mail::send('emails.test',['name'=>$name],function($message){
$to = '1072155122@qq.com';
$message->to($to)->subject('测试邮件');
$attachment = storage_path('app/files/test.doc');
//在邮件中上传附件
$message->attach($attachment,['as'=>'测试文档.doc']);
});
再次访问http://laravel.app:8000/mail/send发送邮件,这样在收件箱中可以看到附件,但附件名称出现中文乱码,解决办法如下:
$message->attach($attachment,['as'=>"=?UTF-8?B?".base64_encode('测试文档')."?=.doc"]);
//发送带图片的邮件
embed
除了附件之外,有时候为了让邮件内容更丰富,还会在邮件内容中插入图片,我们固然可以在邮件视图中硬编码写入图片路径,但是这显然很笨重,灵活性很差,Laravel为我们提供了便捷方法——在视图中使用$message上的embed方法:
{{$name}},这是一封测试邮件
<br>
<img src="{{$message->embed($imgPath)}}">
这里的$message就是上述邮件发送闭包中的$message,Laravel内部自动将该变量传递到邮件视图。当然我们还需要在控制器动作中传入$imgPath变量:
$name = '学院君';
$imgPath = 'https://xueyuanjun.com/wp-statics/images/carousel/LaravelAcademy.jpg';
Mail::send('emails.test',['name'=>$name,'imgPath'=>$imgPath],function($message){
$to = '1072155122@qq.com';
$message->to($to)->subject('测试邮件');
$attachment = storage_path('app/files/test.doc');
//在邮件中上传附件
$message->attach($attachment,['as'=>"=?UTF-8?B?".base64_encode('测试文档')."?=.doc"]);
});
2、使用插件,比如guzzlehttp/guzzle
参考学院君:Link