Laravel的SMTP发送邮件

摘要:使用了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);
评论
  • 2018-12-20 14:01:58 by Eric Guo
    注意名字的问题,这里用了user那么在模版就要使用{{$user}}才可以,要一一对应