SpringBoot邮件报警

一、介绍

邮件报警,大体思路就是收集服务器发生的异常发送到邮箱,做到服务器出问题第一时间知道,当然要是不关注邮箱当我没说

二、配置邮箱

(1)、注册两个邮箱账号(一个用来发送,一个用来接收)

(2)、找到邮箱设置打开协议

(3)、邮箱工具推荐foxmail

三、配置yml

非阿里云下方的配置文件需要授权码(不了解可以百度xx邮箱怎么获取授权码)

spring:
mail:
host: #发送邮件服务器
username: #发送邮件的邮箱地址
password: #(如果是阿里云)阿里云邮箱没有qq邮箱所谓的授权码,所以此处填的是阿里云的登陆密码
from: # 发送邮件的地址,和上面username一致
to: # 接受邮件的地址
properties.mail.smtp.starttls.enable: true
properties.mail.smtp.starttls.required: true
properties.mail.smtp.ssl.enable: true
default-encoding: utf-8

四、编写代码

(1)、编写发送邮件工具类(EmailUtils)

package cn.zz.practice.util;

import cn.zz.practice.config.MailProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component; import javax.annotation.Resource; @Component
@Slf4j
public class EmailUtils { @Resource
private JavaMailSender sender;
@Resource
private MailProperties mailProperties; @Value("${spring.mail.from}")
private String from;
// @Value("${spring.profiles.active}")
// private String active;
@Value("${spring.mail.to}")
private String to; /**
* 发送纯文本的简单邮件
*
* @param content 发送的文本内容
*/
public void sendSimpleMail(String content) {
// //如果是开发环境,直接返回,不发送邮件
// if (StringUtils.equals(active,"dev")) {
// return;
// }
//邮件主题
// String subject = "[" + active + "]" + "[pingou-admin]未知异常";
String subject = "~~~~~~~~~未知异常~~~~~~~~~";
SimpleMailMessage message = new SimpleMailMessage();
//发件人邮箱
message.setFrom(this.mailProperties.getFrom());
//要发送的邮箱
message.setTo(this.mailProperties.getTo());
message.setSubject(subject);
message.setText(content);
try {
sender.send(message);
log.info("简单邮件已经发送。");
} catch (Exception e) {
log.error("发送简单邮件时发生异常!", e);
}
}
}

(2)、拦截所有异常并发送邮件

package cn.zz.practice.aop;

import cn.zz.practice.util.EmailUtils;
import lombok.extern.slf4j.Slf4j;
import net.minidev.json.JSONObject;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter; @Slf4j
@RestControllerAdvice
public class WebRestControllerAdvice { @Resource
private EmailUtils mailUtil; @ExceptionHandler(Exception.class)
public String handleRuntimeException(Exception runtimeException, HttpServletRequest req) {
log.error(runtimeException.getMessage());
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
runtimeException.printStackTrace(pw);
String body = this.readBody(req);
String content = String.format("url:%s\n请求参数:%s\n请求body:%s\n栈信息:%s", req.getRequestURL(), JSONObject.toJSONString(req.getParameterMap()), body, sw.toString());
this.mailUtil.sendSimpleMail(content);
return "服务器错误";
} public String readBody(HttpServletRequest request) { BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try {
br = request.getReader();
String str;
while ((str = br.readLine()) != null) {
sb.append(str);
}
br.close();
} catch (IOException e) {
log.error("[严重异常]读取请求body异常", e);
} finally {
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
} }

ExceptionHandler 的使用场景就是在 Controller 中捕获异常,全局统一处理,而不是在每个 handler 中都进行繁琐的异常捕获操作,优点就是代码整洁。

ExceptionHandler 异常处理过程大体为:执行 handler 方法如果抛出了异常,就根据异常类型查找到对应的异常处理方法,然后执行对应的方法

(3)、编写测试crontroller写个异常

@RestController
@RequestMapping("/demoController")
public class DemoController {
@GetMapping
public void sb(){
int i= 1/0;
}
}

然后就会接到邮件

SpringBoot邮件报警的更多相关文章

  1. linux脚本监控应用且通过邮件报警异常

    一.背景 最近接到监控应用并通过邮件报警的任务,由于需求比较简单,故没有使用springboot那套,而是采用linux脚本的方式进行监控. 二.思路 通过linux自带的定时功能,定时执行一个lin ...

  2. zabbix3 设置邮件报警(五)

    Zabbix邮件报警配置 一.安装sendmail或者postfix(安装一种即可) yum install sendmail #安装 service sendmail start #启动 chkco ...

  3. Python遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例

    遍历目录下所有文件的最后一行进行判断若错误及时邮件报警-案例: #-*- encoding: utf-8 -*- __author__ = 'liudong' import linecache,sys ...

  4. python实现监控URL的一个值小于规定的值--邮件报警

    监控URL的一个值小于规定的值--邮件报警 #!/usr/bin/env python #-*- coding:utf-8 -*- __author__ = 'liudong' import urll ...

  5. zabbix利用mutt和msmtp配置邮件报警

    Mutt安装 yum –y install mutt msmtp安装 yum –y install openssl openssl-devel libntlm libntlm-devel cyrus- ...

  6. Zabbix邮件报警-->Email

    Version:3.0.1 邮件报警有两种media 1.Email zabbix发送报警邮件到指定smtp服务器(使用系统自带的sendmail,发送邮箱是zabbix服务器的本地邮箱账号) 再由s ...

  7. Zabbix邮件报警-->Script

    Version:3.0.1 邮件报警有两种media 1.Email zabbix发送报警邮件到指定smtp服务器(使用系统自带的sendmail,发送邮箱是zabbix服务器的本地邮箱账号) 再由s ...

  8. 分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署

    前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这 ...

  9. zabbix添加邮件报警机制

    zabbix添加邮件报警机制 作者:尹正杰 还记得之前跟大家聊过的一个如何监控一个目录的话题吗?我们虽然监控出来数据了,也有数据了,但是,只是监控也没有用啊~因为我们不能24小时盯着屏幕然后 出了事情 ...

随机推荐

  1. css字体的属性

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  2. 从设计模式角度看OkHttp源码

    前言 说到源码,很多朋友都觉得复杂,难理解. 但是,如果是一个结构清晰且完全解耦的优质源码库呢? OkHttp就是这样一个存在,对于这个原生网络框架,想必大家也看过很多很多相关的源码解析了. 它的源码 ...

  3. P1048_采药(JAVA语言)

    思路:动态规划的背包问题.把时间看作重量,转换为01背包问题求解. 题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出 ...

  4. 实验四 Python综合实践

    课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...

  5. java 基础知识储备

    初始JAVA JAVA 帝国的诞生 1972年C诞生 贴近硬件,运行极快,效率极高. 操作系统,编译器,数据库,网络系统等 指针和内存管理 1982年C++诞生 面向对象 兼容C 图形领域.游戏等 纵 ...

  6. DBeaver、Navicat、MySQL高频报错及解决方法,此文持续更新

    目录 第一坑,没有用管理员身份 第二坑,MySQL 服务无法启动 第三坑,报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost ...

  7. Python基础(二十一):面向对象“类”第四课——魔法方法

    先划一下重点: 6个魔法方法: 动态操作属性的4个函数: 魔法方法 魔法方法的简单介绍 魔法方法的命名规则:方法名(前后各有2个下划线). 通常情况下,不会主动去调用魔法方法,而是在满足一定的条件下, ...

  8. 201871030139-于泽浩 实验二 个人项目D{0-1} KP

    201871030139-于泽浩 实验二 个人项目D{0-1} KP 项目 内容 课程班级博客连接 2018级卓越班 这个作业要求连接 软件工程个人项目 我的课程学习目标 (1)掌握软件项目个人开发流 ...

  9. python3美化表格数据输出结果

    技术背景 在前面一篇博客中我们介绍过关于python的表格数据处理方案,这其中的工作重点就是对表格类型的数据进行梳理.计算和展示,本文重点介绍展示这个方面的工作.首先我们看一个案例,定义一个数组形式的 ...

  10. 000 - 准备工作ADB wifi连接多台鸿蒙设备进行调试

    首先将两台鸿蒙设备插入电脑的usb上 查看两台鸿蒙设备的deviceid C:\Users\Administrator>adb devices * daemon not running; sta ...