laravel自带SMTP邮件配置和遇到的坑
laravel自带SwiftMailer库,集成了多种邮件API,可以很方便的实现邮件的发送。在本教程中使用到的是SMTP(Simple Message Transfer Protocol)简单邮件传输协议,通常理解为邮件发送服务器。
以QQ邮箱为例
使用QQ邮箱的话,需要开启POP3和SMTP服务(QQ邮箱登录=》选择设置=》账户=》下拉找到
POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务)。
使用企业邮箱不用开启SMTP,因为企业邮箱自带,如果配置有问题去查一下是否关闭安全登录(企业邮箱)
开启方式如下:
并且生成授权码
如图:
更改 .env的配置
MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME= *************@qq.com
MAIL_PASSWORD=授权码
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=***********@qq.com
MAIL_FROM_NAME="${APP_NAME}"
MAIL_DRIVER #邮件的驱动类型,默认采用smtp
MAIL_HOST #使用的什么邮箱,这里是qq的邮箱
MAIL_PORT #ssl层的端口
MAIL_USERNAME #发送人的邮箱账号
MAIL_PASSWORD #qq的授权码
MAIL_FROM_ADDRESS #您的邮件地址
MAIL_FROM_NAME #邮箱的名称
protected function schedule(Schedule $schedule)
{
$schedule->call(function () {
// Mail::send()的返回值为空,所以可以其他方法进行判断
Mail::send('email.test',['name'=>$str],function($message){
$to = '*******@qq.com'; $message ->to($to)->subject(date('Y-m-d').'-体温信息:');
});
// 返回的一个错误数组,利用此可以判断是否发送成功
dd(Mail::failures());
})->everyMinute();
}
Mail使用的是laravel的门面类 to 方法接收邮箱地址、用户实例或用户集合作为参数。如果传递的是对象或对象集合,在设置邮件收件人的时候邮件会自动使用它们的 email 和 name 属性,所以事先要确保这些属性在相应类上有效。指定好收件人以后,传递一个可邮寄类的实例到 send 方法
subject该方法可以定义发送邮件的标题
执行命令
[root@root exam_api]# crontab -e
进入cron条目
* * * * * /usr/local/php/bin/php /data/wwwroot/default/exam/exam_api/artisan schedule:run >>//data/wwwroot/default/exam/temp.log
加入如上代码
使用php绝对路径执行框架路径追加到一个日志下 该命令设置是每分钟执行一次