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 服务器进行邮件发送所产生的延迟。对于处理此类延迟,最好的方式是使用队列系统。

Laravel5.5 邮件驱动使用 SMTP 驱动实现邮件发送的更多相关文章

  1. POP3是收邮件的协议,SMTP是发邮件的协议,IMAP是一种邮箱通信协议。

    我也是第一次接触这种服务,是因为我自己在做一个小小的自动推送天气情况到自己邮箱.所以才碰到这个的/ 看一下标题,我们可以先这样理解. POP3(Post Office Protocol - Versi ...

  2. 《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载

    注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架Server ...

  3. WDM驱动和NT驱动之我见

    WDM驱动是NT驱动的进化版.我个人觉得它的主要好处有两个 1.能检测到设备的插入,系统能自动分配设备的硬件信息,如中断号.IO端口.设备物理地址等 2.支持设备的开机状态拔出 之前的NT驱动和硬件关 ...

  4. 使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误

    使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误 这个错误是验证出现错误, $mail->Port = 25; //SMT ...

  5. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)

    catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...

  6. LinuxI2C核心、总线驱动与设备驱动

    I2C体系结构分为三个部分:I2C核心.总线驱动.设备驱动 I2C核心: I2C核心提供了一组不依赖硬件的接口函数,I2C总线驱动和设备驱动之间依赖于I2C核心作为纽带 (1)增加/删除i2c_ada ...

  7. [windows驱动]内核态驱动架构

    1.windows驱动简介: 1.1 windows组件简介: 1.2 windows驱动类型: windows驱动分为两种基本类型: 用户态驱动在用户态下执行.它们一般提供一套win32应用程序和内 ...

  8. 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联

    转载自:http://www.kancloud.cn/yueqian_scut/emlinux/106829 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sy ...

  9. 邮件协议(SMTP)性能测试总结(Foxmail邮箱)

    先介绍一下邮件协议SMTP的工作机制(连接和发送过程),用wireshark工具抓包进行分析,如下: SMTP协议的工作机制(连接和发送过程): 1.建立TCP连接,并将邮件服务器地址给客户端: 2. ...

随机推荐

  1. tomcat +jenkios

    来源:https://www.cnblogs.com/edward2013/p/5269465.html 1. 安装JDK JDK下载地址:  http://www.oracle.com/techne ...

  2. Burp Suite Pro 教程

    1.Burp Suite Pro2.0.11破解版-2018.11.06更新 说明基地址 来源:http://ximcx.cn/post-110.html 启动;如果是用的burp2.0,把下面的代码 ...

  3. 俄罗斯方块(三):"流动"的方块

    问题的提出: 俄罗斯方块允许90度的坡,是不是有点不够科学#(滑稽) 想办法加一种会“滑坡”的方块 本文两大部分: 详细的描绘是怎样的“流动” 写代码,并整合进游戏 本文基于我写的 俄罗斯方块(一): ...

  4. ABP入门系列(4)——创建应用服务

    ABP入门系列目录--学习Abp框架之实操演练 一.解释下应用服务层 应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行相 ...

  5. SQL Server Service Broker创建单个数据库会话(消息队列)

    概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...

  6. sweetalert提示框

    文档 sweetalert Api:http://t4t5.github.io/sweetalert/ 开源项目源码:https://github.com/t4t5/sweetalert 在文件中首先 ...

  7. [Swift]LeetCode517. 超级洗衣机 | Super Washing Machines

    You have n super washing machines on a line. Initially, each washing machine has some dresses or is ...

  8. [SQL]LeetCode595. 大的国家 | Big Countries

    SQL架构 Create table If Not Exists World (name varchar(), continent varchar(), area int, population in ...

  9. [Swift]LeetCode679. 24点游戏 | 24 Game

    You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated ...

  10. iOS学习——(转)多线程

    转载自:iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用 一.多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和 ...