您现在的位置是:网站首页 > 心得笔记

laravel框架下的邮件发送

盛悦2019-08-12478人围观
简介本章节我们将为『话题有新回复』通知新增『邮件通知频道』,当话题被回复时,作者可以收到一份 Email 邮件通知。Laravel 的通知系统默认支持邮件频道的通知方式,我们只需要稍作配置即可。

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

1. 开启 QQ 邮箱的 SMTP 支持

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

只需要开启以下:

14(1).png

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


2. 邮箱发送配置

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

.env

...MAIL_DRIVER=smtpMAIL_HOST=smtp.qq.comMAIL_PORT=25MAIL_USERNAME=xxxxxxxxxxxxxx@qq.comMAIL_PASSWORD=xxxxxxxxxMAIL_ENCRYPTION=tlsMAIL_FROM_ADDRESS=xxxxxxxxxxxxxx@qq.comMAIL_FROM_NAME=LaraBBS...

选项讲解:

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

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

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

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

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

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

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

  8. MAIL_FROM_NAME=LaraBBS —— 用来作为邮件的发送者名称。


3. 添加邮件通知频道

在上一章节介绍的消息通知类基础上继续修改 via() 方法,并新增 mail 通知频道:

app/Notifications/TopicReplied.php

<?php...class TopicReplied extends Notification{
    .
    .
    .
    public function via($notifiable)
    {
        // 开启通知的频道
        return ['database', 'mail'];
    }
    .
    .
    .}

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

app/Notifications/TopicReplied.php

<?php...class TopicReplied extends Notification{
    .
    .
    .

    public function toMail($notifiable)
    {
        $url = $this->reply->topic->link(['#reply' . $this->reply->id]);

        return (new MailMessage)
                    ->line('你的话题有新回复!')
                    ->action('查看回复', $url);
    }}


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

15(1).png