前言:
在日常開發中,我們可能會寫出一些 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 = '錯誤報告通知'; //郵件標題 private $exception; //通過構造函數實例化異常 public function __construct($exception) { $this->exception?=?$exception; ????} ????/** ?????*?build一個異常發送模板 ?????* ?????*?@return?$this ?????*/ ????public?function?build() ????{ ????????return?$this->view('mail.exception')->with(['content'?=>?$this->exception]); ????} }
4、新建一個異常發送的模板視圖,在 View 下新建一個 mail 文件夾,創建名為:exception.blade.php 的視圖模板文件,代碼如下:
{!!?$content?!!}
5、在 config 下配置需要發送郵件的人員和是否發送的開關,在最末尾加上以下代碼:
??'mailException'?=>?[ ????????'report'?=>?env('MailExceptionReport',?0),//是否郵件通知錯誤報告 ????????'toAccounts'?=>?[ ????????????'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、到此差不多了,測試一下,隨便寫點報錯,然后請求接口看是否會為您配置的郵箱發送郵件,結果圖如下:
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END