Laravel5.5 邮件驱动使用 SMTP 驱动实现邮件发送
laravel5.5 邮件驱动 Laravel 支持多种邮件驱动,包括?smtp、Mailgun、Maildrill、Amazon SES、mail?和?sendmail。Mailgun?、?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.qq.=465=xxxxxxxxxxxxxx@qq.===xxxxxxxxxxxxxx@qq.=子钦加油个人博客
注释:
MAIL_DRIVER=smtp??—— 使用支持 ESMTP 的 SMTP 服务器发送邮件; 生成通知类 Laravel 中一条通知就是一个类(通常存在?app/Notifications?文件夹里)。看不到的话不要担心,运行一下以下命令即可创建: php artisan make:notification TopicReplied
添加邮件通知频道 首先我们需要修改?via()?方法,并新增 mail 通知频道: app/Notifications/TopicReplied.php via(
['database','mail'
因为开启了 mail 频道,我们还需要新增?toMail?方法: app/Notifications/TopicReplied.php toMail( = ->reply->topic->link(['#reply' . ->reply-><span style="color: #0000ff">return (<span style="color: #0000ff">new<span style="color: #000000"> MailMessage)
->line('你的话题有新回复!'<span style="color: #000000">) ->action('查看回复',<span style="color: #800080">$url<span style="color: #000000">); } 触发通知 我们希望当用户回复主题后,通知到主题作者。故触发通知的时机是:『回复发布成功后』,在模型监控器里,我们可以在?created?方法里实现此部分代码,修改?created()?方法为以下: app/Observers/ReplyObserver.php created(Reply = ->->increment('reply_count',1
</span><span style="color: #008000">//</span><span style="color: #008000"> 通知作者话题有新的回复</span>
<span style="color: #800080">$topic</span>->user->notify(<span style="color: #0000ff">new</span> TopicReplied(<span style="color: #800080">$reply</span><span style="color: #000000">));
}</span></pre>
测试邮件通知 提交成功后,刷新邮箱,一般几分钟内就能收到话题回复的邮件: ? ?Laravel5.5 使用 SMTP 驱动已经成功发送邮件,其实还有很多地方许要优化,大家应该会发现我们提交回复时,服务器响应会变得非常缓慢,这是『邮件通知』功能请求了 QQ SMTP 服务器进行邮件发送所产生的延迟。对于处理此类延迟,最好的方式是使用队列系统。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |