laravel 邮件发送 文档说明过于模糊,这里打算重写一份更准确的文档
安装 guzzlehttp/guzzle
注意v6.5.5根据laravel版本而定,否则会报错版本冲突,解决办法:requires xxx -> found xxx but it conflicts with xxx 的解决办法
composer require guzzlehttp/guzzle v6.5.5
生成邮件类
代码在/app/Mail/OrderShipped.php
php artisan make:mail OrderShipped
编辑邮件测试代码
subject是邮件标题,view是发送邮件使用的邮件模板,即/resources/views/emails/test.blade.php
public function build()
{
return $this->subject('测试邮件')->view('emails.test');
}
添加发送的测试模板
/resources/views/emails/test.blade.php,这里面的内容就是邮件接收方会收到的模板内容。
模板里添加内容:
一封来自Laravel学院的测试邮件!
配置.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.office365.com
MAIL_PORT=587
MAIL_USERNAME=Yanfa_Redmine@xxx.com
MAIL_PASSWORD=xxx
MAIL_ENCRYPTION=TLS
配置mail.php 的 from字段
这里的配置将会全局生效
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'Yanfa_Redmine@xxx.com'),
'name' => env('MAIL_FROM_NAME', 'redmine'),
],
使用 Tinker 测试邮件发送
yjl@fibocom:/opt/redmine-4.1.1-0/apps/redminel/htdocs$ php artisan tinker
Psy Shell v0.9.12 (PHP 7.3.16 — cli) by Justin Hileman
>>> use Mail;
>>> use App\Mail\OrderShipped;
>>> Mail::to('mr.rocket@foxmail.com')->send(new OrderShipped());
>>> 结果1 null,说明发送成功,结果2,报错信息
我输出的报错信息如下:
我的解决方法:
1、修改.evn 中的 MAIL_ENCRYPTION=ssl 为 MAIL_ENCRYPTION=TLS
2、执行下列命令后,重启服务器
php artisan cache:clear
php artisan config:clear
3、再次执行tinker,成功。
视图数据
要想让控制器给邮件视图传递数据,有两种方法
1)公共数据
在orderShipped.php中增加公共数据mantisID
修改邮件模板 test.blade.php
那么邮件中将自动展示数据
2)with方法,没有详细研究,请参考https://learnku.com/docs/laravel/5.7/mail/2283#508a68