摘要:使用了laravel自带的smtp协议
1、配置邮箱,这里使用的是自己域名注册的腾讯企业邮箱 no-reply@guosx.com
2、开启相对应的pop3/SMTP协议获取对应的密码
3、在.env中配置信息(为了安全,敏感信息放在了env中没有放到mail.php配置文件中)
MAIL_DRIVER=smtp
MAIL_HOST=smtp.exmail.qq.com
MAIL_PORT=465
MAIL_USERNAME=no-reply@guosx.com
MAIL_PASSWORD=xxxxxxxx
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=no-reply@guosx.com
MAIL_FROM_NAME=会武术的地瓜
4、编写路由控制器
这里放到了模型里面,后期再看是否要迁移位置
use Illuminate\Support\Facades\Mail;
/**
* TODO 自动回复信息
*
* @param array $data
* @return bool
*/
public static function autoReply($data=[])
{
try{
$message = $data['user'];
$to = $data['to'];
$subject = '自动回复';
Mail::send(
'emails.notice',
['user' => $message],
function ($message) use($to, $subject) {
$message->to($to)->subject($subject);
}
);
if(empty(Mail::failures())){
return true;
}else{
return false;
}
}catch (\Throwable $e){
return false;
}
}
5、利用错误数组来判断是否发送成功
Mail::send();需要传三个参数,第一个为引用的模板,第二个为给模板传递的变量,第三个为一个闭包,参数绑定Mail类的一个实例。
Mailer::send文档 https://laravel.com/api/5.1/Illuminate/Mail/Mailer.html#method_send
Mailer:: failures文档https://laravel.com/api/5.1/Illuminate/Mail/Mailer.html#method_failures
6、使用不同的邮箱发送邮件
在需要使用其它账号的地方,自己创建一个新的Swift_Mailer来发送邮件
// 备份原有Mailer
$backup = Mail::getSwiftMailer();
// 设置邮箱账号
$transport = Swift_SmtpTransport::newInstance('smtp.qq.com', 25, 'tls');
$transport->setUsername('email_username');
$transport->setPassword('email_password');
$mailer = new Swift_Mailer($transport);
Mail::setSwiftMailer($mailer);
Mail::send();
// 发送后还原
Mail::setSwiftMailer($backup);