一、开启POP3和SMTP服务
在
qq邮箱 设置 账户下
2. 按照要求发送短信后会获取一个秘钥 (要保存好,避免麻烦的重复获取)
二、使用步骤
1.对 Laravel 框架中邮件发送的配置文件进行修改:
.env 文件:
MAIL_MAILER=smtp MAIL_HOST=smtp.qq.com MAIL_PORT=465 MAIL_USERNAME=你的邮箱 MAIL_PASSWORD=前面获取的秘钥 MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=你的邮箱 MAIL_FROM_NAME=邮件标题
config/mail.php 文件:
return [
‘driver’ => env(‘MAIL_DRIVER’, ‘smtp’),
‘host’ => env(‘MAIL_HOST’, ‘smtp.mailgun.org’),
‘port’ => env(‘MAIL_PORT’, 587),
‘from’ => [
‘address’ => env(“MAIL_USERNAME”, “”),
‘name’ => env(“MAIL_FROM_NAME”)
],
‘encryption’ => env(‘MAIL_ENCRYPTION’),
‘username’ => env(‘MAIL_USERNAME’),
‘password’ => env(‘MAIL_PASSWORD’),
‘sendmail’ => ‘/usr/sbin/sendmail -bs’,
‘pretend’ => env(‘MAIL_PRETEND’, false),
];
2、生产控制器、配置路由
php artisan make:controller MailController
Route::get(‘mail/send’,‘MailController@sendMail’);
3.编辑控制器、加入以下代码:
// 记得使用内置的邮件类 use Illuminate\Support\Facades\Mail;
public function sendMail() {
$name = '这是邮件发送的标题';
// Mail::send()的返回值为空,所以可以其他方法进行判断
// Mail::send();需要传三个参数;
// 第一个为引用的模板
// 第二个为给模板传递的变量(邮箱发送的文本内容)
// 第三个为一个闭包,参数绑定Mail类的一个实例。
Mail::send('emails',['name'=>$name],function($message){
$to = 'itlaowen@qq.com';
$message ->to($to)->subject('邮件测试');
});
// 返回的一个错误数组,利用此可以判断是否发送成功
dd(Mail::failures());
}
4、由于上面👆指定了邮件发送的视图层、所以去创建一个view
这是测试邮件!!
{{$name}}
5、测试
访问:http://localhost/mail/send 如果返回一个空数组则表示邮件发送成功。
6、报错:stream_socket_client() 、certificate verify failed
具体报错如下:
stream_socket_client(): SSL operation failed with code 1. OpenSSL
Error messages: error:14090086:SSL
routines:ssl3_get_server_certificate:certificate verify failed
原因:
php openssl 没有加载 ca 证书 , 去下载个 ca 证书然后添加进去即可
解决:
查看phpinfo()、检查openssl.cafile的文件是否存在
不存在的话进行如下操作
1、找到自己的 php 的安装目录
2、进入目录:cd php/etc/
3、下载 ca 证书:wget http://curl.haxx.se/ca/cacert.pem
4、查看目录:pwd
5、编辑 php.ini:vim php.ini
6、修改 openssl.cafile 的路径 openssl.cafile=/usr/local/php/etc/cacert.pem
解决laravel 8 发送邮件提示: cannot sendmessage without a sender address