Laravel 郵件推送系統異常

Laravel 郵件推送系統異常

前言:

在日常開發中,我們可能會寫出一些 bug,但是項目已經上線了,我們無法第一時間得到客戶的反饋,這時候郵件報錯系統就派上用場了,我們都知道 laravel 的異常處理都需要通過 Handler.php 文件來處理,那么就從此處開始入手

1、在 report 的方法里判斷是否需要發送郵件,代碼如下:

public?function?report(Exception?$exception) { ????//判斷是否需要發送郵件 ????if?(config('mail.mailException.report'))?{ ????????$this->mailReport($exception,?config('mail.mailException.toAccounts',?[])); ????} ????parent::report($exception); }

2、定義一個發送郵件的方法,代碼如下:

/** ?*?郵件通知錯誤報告. ?* ?*?@param?$exception?object?錯誤信息 ?*?@param?array?$accounts?array?收件人 ?*/ public?function?mailReport($exception,?$accounts?=?[]) { ????if?(!empty($accounts))?{ ????????try?{ ????????????$e???????=?FlattenException::create($exception); ????????????$handler?=?new?SymfonyExceptionHandler(); ????????????$html????=?$handler->getHtml($e); ????????????$mail????=?new?Mail(); ????????????$mail::to($accounts)->send(new?ExceptionReport($html)); ????????}?catch?(Exception?$ex)?{ ????????} ????} }

3、新建一個郵件異常類,放在 App 下的 Mail 文件夾中,名為:ExceptionReport.php,代碼如下:

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateQueueSerializesModels; class ExceptionReport extends Mailable {     use Queueable, SerializesModels;     /**      * Create a new message instance.      */     public $subject = &#39;錯誤報告通知&#39;; //郵件標題     private $exception;      //通過構造函數實例化異常     public function __construct($exception)     {         $this->exception?=?$exception; ????} ????/** ?????*?build一個異常發送模板 ?????* ?????*?@return?$this ?????*/ ????public?function?build() ????{ ????????return?$this-&gt;view('mail.exception')-&gt;with(['content'?=&gt;?$this-&gt;exception]); ????} }

4、新建一個異常發送的模板視圖,在 View 下新建一個 mail 文件夾,創建名為:exception.blade.php 的視圖模板文件,代碼如下:

{!!?$content?!!}

5、在 config 下配置需要發送郵件的人員和是否發送的開關,在最末尾加上以下代碼:

??'mailException'?=&gt;?[ ????????'report'?=&gt;?env('MailExceptionReport',?0),//是否郵件通知錯誤報告 ????????'toAccounts'?=&gt;?[ ????????????'guifeng.liang@zun1.com', ????????] ????]?,

6、在.env 文件中配置好郵箱發送系統的信息,格式如下:

?//郵件驅動 ?MAIL_DRIVER=smtp ?//郵件服務器 ?MAIL_HOST=smtp.exmail.qq.com ?//郵件端口 ?MAIL_PORT=465 ?//郵箱用戶名 ?MAIL_USERNAME=1231231@qq.com ?//郵箱密碼 MAIL_PASSWORD=dasdasdadasdad //加密方式 MAIL_ENCRYPTION=ssl //發件人郵箱 MAIL_FROM_ADDRESS=1476982312@qq.com //發件人姓名 MAIL_FROM_NAME=犯二青年 //是否發送郵件,發送為1,不發送為0 MailExceptionReport=1

7、到此差不多了,測試一下,隨便寫點報錯,然后請求接口看是否會為您配置的郵箱發送郵件,結果圖如下:

Laravel 郵件推送系統異常

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享