目录
添加依赖
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
配置文件
在 application.yml 文件中的邮件相关的配置数据
spring:
mail:
host: smtp.qq.com # qq邮箱的SMTP
username: xxx@qq.com # 发送方的qq邮箱
password: xxx # smtp密码(是16位授权码,不是邮箱密码)
receiver: xxx@jd.com # 接收方邮箱,随意填写
default-encoding: UTF-8 # 编码格式
protocol: smtp # SMTP邮件协议
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
获取配置文件中的 password
在 pc 端打开qq邮箱点击设置
点击邮箱
拉到下面
扫二维码后,向绑定手机发送短信后,即可获得
实战代码
创建发送邮件的实体类
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class MailBean {
/**
* 邮件接收人
*/
private String recipient;
/**
* 邮件主题
*/
private String subject;
/**
* 邮件内容
*/
private String content;
}
创建发送邮件的工具类
/**
* 发送邮件
*/
@Component
@RequiredArgsConstructor
public class MailUtil {
/**
* 邮件发送者
*/
@Value("${spring.mail.username}")
private String MAIL_SENDER;
/**
* 注入QQ发送邮件的bean
*/
private final JavaMailSender javaMailSender;
public void sendMail(String mail,String content) {
MailBean mailBean = new MailBean();
//接收者
mailBean.setRecipient(mail);
//标题
mailBean.setSubject("xxx");
//内容主体
mailBean.setContent(content);
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();
//发送者
mailMessage.setFrom(MAIL_SENDER);
//接收者
mailMessage.setTo(mailBean.getRecipient());
//邮件标题
mailMessage.setSubject(mailBean.getSubject());
//邮件内容
mailMessage.setText(mailBean.getContent());
//发送邮箱
javaMailSender.send(mailMessage);
} catch (Exception e) {
throw new CustomException(500,"邮件发送失败");
}
}
}
在业务中使用,我这里是当一个接口响应时间超过 x ms就会发送邮件告警功能
@Component
@RequiredArgsConstructor
public class ResponseTimeManager {
private final MailUtil mailUtil;
private final Logger logger = LoggerFactory.getLogger(ResponseTimeManager.class);
/**
* 算法调用接口的超时设置为 x ms
*/
private static final Long IDENTIFICATION_TIMEOUT = xL;
public void timeoutProcessing(ClassAndMethod response) {
String send = "xxx@qq.com";
String content = "xxx";
//算法调用
if (response.getClassName().equals(IDENTIFICATION_INVOKE.getClassName())
&& response.getMethodName().equals(IDENTIFICATION_INVOKE.getMethodName())
&& response.getResponseTime() >= IDENTIFICATION_TIMEOUT) {
content = "算法接口调用超时";
mailUtil.sendMail(send, content);
logger.info("======发送邮件成功======");
}
}
}