lumen中邮件发送以及邮件告警,在此记录
-
安装邮件组件
修改composer.json,在require中增加以下语句,并执行composer update"illuminate/mail": "^5.8",
-
在config下创建mail.php,内容如下
return [ 'driver' => env('MAIL_DRIVER'), 'host' => env('MAIL_HOST'), // 根据你的邮件服务提供商来填 'port' => env('MAIL_PORT'), // 同上 'encryption' => env('MAIL_ENCRYPTION'), // 同上 一般是tls或ssl 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'from' => [ 'address' => env('MAIL_FROM_ADDRESS',env('MAIL_USERNAME')), 'name' => env('MAIL_FROM_NAME',env('MAIL_USERNAME')), ], ];
-
在.env中添加以下代码
这里用的是网易的邮箱,需要登录你的邮箱,点开设置,这个授权码在下面 MAIL_PASSWORD这里会用到
```
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=465
MAIL_USERNAME=test@163.com
MAIL_PASSWORD=test@163
MAIL_ENCRYPTION=ssl
```
-
在bootstrap/app.php,添加以下几行代码
$app->singleton('mailer', function () use ($app) { return $app->loadComponent('mail', Illuminate\Mail\MailServiceProvider::class, 'mailer'); }); $app->configure('mail');
-
在resources\views目录下创建emails\sys_error.blade.php
环境: {{ $env }} {{ gethostname() }} 是否是系统级异常报告: {{ $is_report ? '是' : '否' }} @if(app()->runningInConsole()) Console message: Argv: {!! var_export($GLOBALS['argv'], true) !!} @else Request message: URL: {{ \Request::fullUrl() }} //当前文件夹的url IP: {{ \Request::server('REMOTE_ADDR') }} //IP地址 UA: {{ \Request::server('HTTP_USER_AGENT') }} @endif Exception: 时间:{{ date('Y-m-d H:i:s') }} 异常: {{ get_class($e) }} 错误码: {{ $e->getCode() }} 错误内容: {!! $e->getMessage() !!} 错误文件: {{ $e->getFile() }} {{ $e->getLine() }} 错误栈: {!! $e->getTraceAsString() !!}
-
在控制器中发送邮件
use Illuminate\Support\Facades\Mail; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class Controller extends BaseController { public function test(Request $request) { //测试发送告警邮件 try { $this->checkNum(2); } catch (\Exception $e) { $this->email($e,true); exit(); } } public function checkNum($number) { if($number>1) { throw new \Exception("Value must be 1 or below"); } return true; } public function email($e,$is_laravel_report=false) { $mail_to = env('EXCEPTION_MAIL_TO'); log_daily('test')->info('发邮件开始:'.date('Y-m-d H:i:s',time())); Mail::send(['text' => 'emails.sys_error'], ['e' => $e, 'env' => app()->environment(), 'is_report' => $is_laravel_report], function($msg) use ($mail_to, $e){ $msg->to($mail_to)->subject("异常:" .get_class($e)); }); log_daily('test')->info('发邮件结束开始:'.date('Y-m-d H:i:s',time())); } }