Laravel进阶系列笔记--(二十五)Laravel 基于Notification邮件通知的快速使用
作者:温新
时间:2021-07-31
hi,我是温新,一-名PHPer。
本系列采用Laravel8.x演示。
之前的文章记录过发送邮件,邮件就是通知的一种。除了邮件外短信也是通知。比如说微信支付,当支付后会有一个支付金额的通知。
消费通知介绍
Laravel支持多种消息通知,如邮件、短信、Slack等。通知还能存储到数据库以便后续在 Web 页面中显示。
应用场景
举例:如用户注册后,发送一封邮件通知用户注册成功,根据 Laravel7使用QQ邮箱发送邮件详解 这篇文章的介绍就可以实现,即用户注册成功后,下一行代码就是发送邮件的代码。如果后期需要使用短信或拿用户信息做些其它功能,那么代码就会变得臃肿,难以维护且不可复用。
而消息通知简化了这些操作,使得代码更加优雅可读。
通知可以有多种方式实现,如Laravel事件监听、消息通知、队列都可以实现,后续将这些功能结合起来做一个学习式温习式记录。
Notification邮件通知
对于邮件通知,我这里使用QQ邮件作为演示。
我这里使用了广播时的数据库,因此用户表中是有数据的,发送邮件基于用户表发送。
第一步:配置服务
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// .env</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">MAIL_DRIVER</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">smtp</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">MAIL_HOST</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">smtp</span>.<span style="box-sizing: border-box;color: rgb(0, 0, 0)">qq</span>.<span style="box-sizing: border-box;color: rgb(0, 0, 0)">com</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 邮箱服务器</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">MAIL_PORT</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(17, 102, 68)">465</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 端口</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">MAIL_USERNAME</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">xyhcx@foxmail</span>.<span style="box-sizing: border-box;color: rgb(0, 0, 0)">com@qq</span>.<span style="box-sizing: border-box;color: rgb(0, 0, 0)">com</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 邮件发送者名称(自己)</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">MAIL_PASSWORD</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=****************</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 邮件秘钥(开通服务后的秘钥)</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">MAIL_ENCRYPTION</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ssl</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 加密传输</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">MAIL_FROM_ADDRESS</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">xyhcx@foxmail</span>.<span style="box-sizing: border-box;color: rgb(0, 0, 0)">com@qq</span>.<span style="box-sizing: border-box;color: rgb(0, 0, 0)">com</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 邮件发送者地址(自己)这个必须与MAIL)USERNAME一致</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">MAIL_FROM_NAME</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">ziruchu</span> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 发送者名称,可自定义</span></span>
第二步:创建消息通知
php artisan make:notification SendUserRegisterEmail
该命令会在app/Notifications
目录下生成对应的通知类文件。该通知文件中默认有,其中via
为消息构建方法,用于将通过转为特定渠道优化的消息。
第三步:定义路由
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// web.php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 发送邮件</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">Route</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'send'</span>,<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'TestController@send'</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 邮件成功后的跳转页面</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 0, 0)">Route</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">get</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'succ'</span>, <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span>(){</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'消息邮件发送成功'</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">});</span>
第四步:创建控制器与方法
1)控制器
php artisan make:controller TestController
2)方法
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// TestController.php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">send</span>()</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>
第三步:编写邮件消息通知类
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// Notifications/SendUserRegisterEmail.php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"><?</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">namespace</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">App\Notifications</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Illuminate\Bus\Queueable</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Illuminate\Contracts\Queue\ShouldQueue</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Illuminate\Notifications\Messages\MailMessage</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Illuminate\Notifications\Notification</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">class</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">SendUserRegisterEmail</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">extends</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Notification</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Queueable</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 用户实例信息</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(34, 17, 153)">null</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">__construct</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$this</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">user</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 哪种通知</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">via</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$notifiable</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> [<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'mail'</span>];</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 邮件发送的内容</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// $notifiable接收的同样是用户实例信息</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">toMail</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$notifiable</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> (<span style="box-sizing: border-box;color: rgb(119, 0, 136)">new</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">MailMessage</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">line</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'The introduction to the notification.'</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">action</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'Notification Action'</span>, <span style="box-sizing: border-box;color: rgb(0, 0, 0)">url</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'/'</span>))</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">line</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'Thank you for using our application!'</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">toArray</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$notifiable</span>)</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> [];</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>
第四步:模拟注册用户进行发送邮件
懒,不去创建登录页面了,直接模拟用户注册。
1)方式一:控制器层发送邮件。修改send
方法
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"><?</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">namespace</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">App\Http\Controllers</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">App\Models\User</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">App\Notifications\SendUserRegisterEmail</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">use</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Illuminate\Support\Facades\Notification</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">send</span>()</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 模拟用户注册</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">User</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">create</span>([</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'name'</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=></span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'赵六'</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'email'</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=></span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'3413648628@qq.com'</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'password'</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=></span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">encrypt</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'123456'</span>),</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> ]);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 为注册用户发送邮件</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">Notification</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">send</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span>, <span style="box-sizing: border-box;color: rgb(119, 0, 136)">new</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">SendUserRegisterEmail</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span>));</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>
2)方式二:模型层调用
User
模型中发送邮件
<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// Models/User.php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 添加用户并发送邮件</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">public</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">static</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">function</span> <span style="box-sizing: border-box;color: rgb(0, 0, 255)">sendMail</span>()</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 创建用户</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">self</span>::<span style="box-sizing: border-box;color: rgb(0, 0, 0)">create</span>([</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'name'</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=></span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'赵六'</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'email'</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=></span> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'3413648628@qq.com'</span>,</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'password'</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=></span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">encrypt</span>(<span style="box-sizing: border-box;color: rgb(170, 17, 17)">'123456'</span>),</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> ]);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 发送邮件</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">notify</span>(<span style="box-sizing: border-box;color: rgb(119, 0, 136)">new</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">SendUserRegisterEmail</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span>));</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">return</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$user</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>
修改控制器中的send
方法
// TestController.php
<?php
namespace App\Http\Controllers;
use App\Models\User;
public function send()
{
$user = User::sendMail();
}
这两方式可以单独演示。目前使用的是默认的发送信息,定义的发送成功后的跳转路由也没有用到,下面将开始自定义发送邮件的内容。
第五步:访问路由发送邮件
方式:你的域名/send
到这里,邮件发送已经完成。下面的操作为自定义操作。
其他自定义操作
基本信息操作
为了方便起见,我这里修改了控制器中的send
方法,取出一个用户对它进行发送邮件。
// TestController.php
$user = User::find(9);
Notification::send($user, new SendUserRegisterEmail($user));
自定义基本信息
// Notifications/SendUserRegisterEmail.php
public function toMail($notifiable)
{
return (new MailMessage)
// 邮件主题
->subject('注册成功')
// 通知小标题
->greeting($this->user->name . '您好: ')
// 行文本信息
->line('您于' . $this->user->created_at->format('Y-m-d H:i:s').'注册为自如初网站用户')
->line('自如初一个PHP记录博客')
// 生成按钮地址
->action('验证', url('succ'))
// 按钮样式
->level('success');
}
自定义邮件模板
可以看到,使用自定义的通知时会有默认的模板,若不想用默认的模板则需要自自定义,好在自定义模板很简单。
1)修改控制器方法
// Notifications/SendUserRegisterEmail.php
public function toMail($notifiable)
{
return (new MailMessage)
->subject('注册成功')
// 自定义模板 email
->view('email',['user'=>$this->user]);
}
2)定义邮件通知模板
// resources/views/email.blade.php
<h1>自如初</h1>
<p>欢迎 {{ $user->name }}</p>
<p>这里是自如初学习记录网站</p>
邮件预览
在设计邮件模板时,可以通过预览来确定是否是自己所想要的模板,邮件预览使用toMail
方法。
修改控制器方法
// TestController.php
public function send()
{
$user = User::find(9);
// 访问路由时返回邮件模板
return (new SendUserRegisterEmail($user))->toMail($user->user);
}
还是Markdown语法模板邮件,这里就不记录了。若想快速使用Markdown通知模板,请参考 Laravel进阶系列笔记--(18)Laravel 发送邮件
我是温新
每天进步一点点,就一点点