某业务系统开发完成后运行正常,但是由于业务访问较大系统有小概率发生异常。而因为线上的业务不能停给系统运维带来较大困难,为解决此问题经过多个方案最后决定使用邮件来实时监测异常。
系统业务异常页面
- 由于业务需要系统隐藏了调试信息,系统有异常就跳转到统一的页面
解决方案
引用ThinkPHP 邮件插件
1
| TP5的Extend文件夹下引入phpmailer,包含:class.smtp.php 和 phpmailer.php
|
TP5异常处理类增加邮件功能
Handlel类的内部增加邮件发送功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| namespace think\exception; use phpmailer\phpmailer;
/* * 邮件发送 * */ public function sendMail($msg,$toemail){ $sendmail = 'yang.xxx@qq.com'; //发件人邮箱 $sendmailpswd = "ahiuhiuhihi"; //客户端授权密码,而不是邮箱的登录密码! $send_name = 'xxx';// 设置发件人信息,如邮件格式说明中的发件人, $toemail = $toemail;//定义收件人的邮箱 $to_name = 'Other';//设置收件人信息,如邮件格式说明中的收件人 $mail = new PHPMailer(); $mail->isSMTP();// 使用SMTP服务 $mail->CharSet = "utf8";// 编码格式为utf8,不设置编码的话,中文会出现乱码 $mail->Host = "smtp.qq.com";// 发送方的SMTP服务器地址 $mail->SMTPAuth = true;// 是否使用身份验证 $mail->Username = $sendmail;//// 发送方的 $mail->Password = $sendmailpswd;//客户端授权密码,而不是邮箱的登录密码! $mail->SMTPSecure = "ssl";// 使用ssl协议方式 $mail->Port = 465;// qq端口465或587) $mail->setFrom($sendmail,$send_name);// 设置发件人信息,如邮件格式说明中的发件人, $mail->addAddress($toemail,$to_name);// 设置收件人信息,如邮件格式说明中的收件人, $mail->addReplyTo($sendmail,$send_name);// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱 $mail->Subject = "微信售票服务代码级别异常状态报告!";// 邮件标题 $mail->Body = $msg;// 邮件正文 //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容,如果不支持Html方式,就会用到这个,基本无用 if(!$mail->send()){// 发送邮件 //echo "Message could not be sent."; //echo "Mailer Error: ".$mail->ErrorInfo;// 输出错误信息 }else{ //echo '发送成功'; } }
|
使用邮件发送功能
1 2 3 4 5 6 7 8
| $emailLst // 需要发送给谁的邮箱集合 $userAgent = ";2.访问客户端信息:".json_encode($info,JSON_UNESCAPED_UNICODE); $msg = "售票系统代码级别异常报告(DEBUG->false)=>"." 1.报警日期:".$nowT_.$userAgent.";3.内容:".json_encode($data,JSON_UNESCAPED_UNICODE); if(!empty($emailLst)) { foreach ($emailLst as $key_ => $item_) { $this->sendMail($msg, $item_); } }
|
邮件预览