一、简单的邮件发送
1、导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、添加yml配置文件
spring:
mail:
# 服务器地址 qq邮箱的为smtp.qq.com,163邮箱则为smtp.163.com
host: smtp.qq.com
# 服务协议
protocol: smtp
# 编码
default-encoding: UTF-8
# 发送方邮件的账户
username: 10001@qq.com
#授权码 QQ邮箱–>邮箱设置–>账户,下滑找到POP3/IMAP/SMTP/Exchange/CardDav/CalDav服务,开启POP3/SMTP服务 下方有生成授权码的提示,生成一组授权码16位授权码
password: kcsuscogbwhudizb
test-connection: true
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
3、添加一个接口
public interface EmailService {
void sendEmail(String subject, String text, String to);
}
4、添加接口实现类
@Service
public class EmailServiceImpl implements EmailService {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String from;
@Override
public void sendEmail(String subject, String text, String to) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setSubject(subject);
message.setText(text);
message.setTo(to);
mailSender.send(message);
}
}
5、添加前端控制器接口
@RestController
@RequestMapping("/email")
public class EmailController {
@Autowired
private EmailService emailService;
@PostMapping("/sendEmail")
public void sendEmail(String subject, String text, String to) {
emailService.sendEmail(subject, text, to);
}
二、拦截到全局异常并发送到指定的邮箱
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
private Logger logger = LoggerFactory.getLogger(getClass().getName());
@Autowired
private EmailServiceImpl emailService;
@Override
protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) {
return new ResponseEntity<>("出错了", NOT_EXTENDED);
}
@ExceptionHandler(value = Exception.class)
@ResponseBody
public String jsonHandler(HttpServletRequest request, Exception e) {
log(e, request);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
emailService.sendEmail( "异常",sw.toString(),"10001@qq.com" );
return "发生异常";
}
private void log(Exception ex, HttpServletRequest request) {
logger.error("请求地址:" + request.getRequestURL());
Enumeration enumeration = request.getParameterNames();
logger.error("请求参数");
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement().toString();
logger.error(name + "---" + request.getParameter(name));
}
StackTraceElement[] error = ex.getStackTrace();
for (StackTraceElement stackTraceElement : error) {
logger.error(stackTraceElement.toString());
}
}
}