zoukankan      html  css  js  c++  java
  • Laravel5.5 邮件驱动使用 SMTP 驱动实现邮件发送

    laravel5.5 邮件驱动

    Laravel 支持多种邮件驱动,包括 smtpMailgunMaildrillAmazon SESmail 和 sendmailMailgun 、 Maildrill 都是第三方邮件服务。mail 驱动使用 PHP 提供的 mail 函数。sendmail 驱动通过 Sendmail/Postfix(Linux)提供的命令发送邮件,smtp 驱动使用支持 ESMTP 的 SMTP 服务器发送邮件。mail 不安全,sendmail 需要安装配置 Sendmail/Postfix,并且信用不高,很容易被当成垃圾邮件,第三方服务的信用是最高的,商业软件推荐使用。

    我们以 QQ 邮箱为例,我们将开启 QQ 的 SMTP 功能,并配置项目的 SMTP 邮件发送功能。其他邮箱的配置基本大致相同。

    开启 QQ 邮箱的 SMTP 支持

    首先我们需要在 QQ 邮箱的账号设置里开启 POP3 和 SMTP 服务。具体请查看 如何打开POP3/SMTP/IMAP功能? 。

    只需要开启以下:

    复制方框里的『授权码』,授权码将作为我们的密码使用:

    邮箱发送配置

    Laravel 中邮箱发送的配置存放于 config/mail.php 中。不过 mail.php 中我们所需的配置,都可以通过 .env 来配置。作为最佳实践,我们优先选择通过环境变量来配置:

    .env

    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.qq.com
    MAIL_PORT=465
    MAIL_USERNAME=xxxxxxxxxxxxxx@qq.com
    MAIL_PASSWORD=xxxxxxxxx
    MAIL_ENCRYPTION=SSL
    MAIL_FROM_ADDRESS=xxxxxxxxxxxxxx@qq.com
    MAIL_FROM_NAME=子钦加油个人博客

    注释:

    1. MAIL_DRIVER=smtp  —— 使用支持 ESMTP 的 SMTP 服务器发送邮件;

    2. MAIL_HOST=smtp.qq.com  —— QQ 邮箱的 SMTP 服务器地址,必须为此值;

    3. MAIL_PORT=465   —— QQ 邮箱的 SMTP 服务器端口,必须为此值;

    4. MAIL_USERNAME=xxxxxxxxxxxxxx@qq.com —— 请将此值换为你的 QQ + @qq.com;

    5. MAIL_PASSWORD=xxxxxxxxx  —— 密码是我们第一步拿到的授权码;

    6. MAIL_ENCRYPTION=SSL  —— 加密类型,选项 null 表示不使用任何加密,其他选项还有 TLS,这里我们使用 SSL 即可。

    7. MAIL_FROM_ADDRESS=xxxxxxxxxxxxxx@qq.com —— 此值必须同 MAIL_USERNAME 一致;

    8. MAIL_FROM_NAME=小张个人博客 —— 用来作为邮件的发送者名称。


    生成通知类

    Laravel 中一条通知就是一个类(通常存在 app/Notifications 文件夹里)。看不到的话不要担心,运行一下以下命令即可创建:

    php artisan make:notification TopicReplied

    添加邮件通知频道

    首先我们需要修改 via() 方法,并新增 mail 通知频道:

    app/Notifications/TopicReplied.php

    public function via($notifiable)
        {
            // 开启通知的频道
            return ['database', 'mail'];
        }

    因为开启了 mail 频道,我们还需要新增 toMail 方法:

    app/Notifications/TopicReplied.php

    public function toMail($notifiable)
    {
    $url = $this->reply->topic->link(['#reply' . $this->reply->id]);
    
    return (new MailMessage)
            ->line('你的话题有新回复!')
            ->action('查看回复', $url);
    }

    触发通知

    我们希望当用户回复主题后,通知到主题作者。故触发通知的时机是:『回复发布成功后』,在模型监控器里,我们可以在 created 方法里实现此部分代码,修改 created() 方法为以下:

    app/Observers/ReplyObserver.php

     public function created(Reply $reply)
        {
            $topic = $reply->topic;
            $topic->increment('reply_count', 1);
    
            // 通知作者话题有新的回复
            $topic->user->notify(new TopicReplied($reply));
        }

    测试邮件通知

    提交成功后,刷新邮箱,一般几分钟内就能收到话题回复的邮件:

     

     Laravel5.5 使用 SMTP 驱动已经成功发送邮件,其实还有很多地方许要优化,大家应该会发现我们提交回复时,服务器响应会变得非常缓慢,这是『邮件通知』功能请求了 QQ SMTP 服务器进行邮件发送所产生的延迟。对于处理此类延迟,最好的方式是使用队列系统。

  • 相关阅读:
    图论4-floyd
    。。。
    [LOJ10164]数字游戏
    KMP模板
    无向图割点模板
    tarjan有向图模板
    LCA倍增模板
    P2149 [SDOI2009]Elaxia的路线
    树的直径dp模板
    [暑假集训]Day4 T3 平板涂色
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/10345724.html
Copyright © 2011-2022 走看看