邮件api
相关邮件服务的授权码(官网自找)
导入依赖
<!--邮件起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.yml配置文件配置相关信息
spring:
# 邮件配置
mail:
host: smtp.163.com # 邮件服务器
port: 994 # 端口
username: {邮箱名,即发件人}
# 授权码
password: {自己的授权码}
default-encoding: UTF-8
properties:
mail.smtp.auth: true # 配置SMTP服务器是否需要验证身份验证
mail.smtp.starttls.enable: true # 是否启用TLS加密
protocol: smtps # 使用SMTPS协议
邮件实体类
@Data
public class MailRequest implements Serializable {
/**
* 接收人
*/
private String sendTo;
/**
* 邮件主题
*/
private String subject;
/**
* 邮件内容
*/
private String text;
/**
* 附件路径
*/
private String filePath;
}
配置接口
public interface SendMailService {
/**
* 简单文本邮件
*
* @param mailRequest 邮件对象
*/
void sendSimpleMail(MailRequest mailRequest);
/**
* Html格式邮件,可带附件
*
* @param mailRequest 邮件对象
*/
void sendHtmlMail(MailRequest mailRequest);
}
实现接口
@Service
public class SendMailServiceImpl implements SendMailService {
//注入邮件工具类 mail依赖带的工具类
@Resource
private JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String sendMailer;
private static final Logger logger = LoggerFactory.getLogger(SendMailServiceImpl.class);
// 使用断言进行检测
public void checkMail(MailRequest mailRequest) {
Assert.notNull(mailRequest,"邮件请求不能为空");
Assert.notNull(mailRequest.getSendTo(), "邮件收件人不能为空");
Assert.notNull(mailRequest.getSubject(), "邮件主题不能为空");
Assert.notNull(mailRequest.getText(), "邮件内容不能为空");
}
@Override
public void sendSimpleMail(MailRequest mailRequest) {
SimpleMailMessage message = new SimpleMailMessage();
checkMail(mailRequest);
//邮件发件人
message.setFrom(sendMailer);
//邮件收件人 1或多个
message.setTo(mailRequest.getSendTo().split(","));
//邮件主题
message.setSubject(mailRequest.getSubject());
//邮件内容
message.setText(mailRequest.getText());
//邮件发送时间
message.setSentDate(new Date());
javaMailSender.send(message);
logger.info("发送邮件成功:{}->{}",sendMailer,mailRequest.getSendTo());
}
@Override
public void sendHtmlMail(MailRequest mailRequest) {
MimeMessage message = javaMailSender.createMimeMessage();
checkMail(mailRequest);
try {
MimeMessageHelper helper = new MimeMessageHelper(message,true);
//邮件发件人
helper.setFrom(sendMailer);
//邮件收件人 1或多个
helper.setTo(mailRequest.getSendTo().split(","));
//邮件主题
helper.setSubject(mailRequest.getSubject());
//邮件内容
helper.setText(mailRequest.getText(),true);
//邮件发送时间
helper.setSentDate(new Date());
String filePath = mailRequest.getFilePath();
if (StringUtils.hasText(filePath)) {
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName,file);
}
javaMailSender.send(message);
logger.info("发送邮件成功:{}->{}",sendMailer,mailRequest.getSendTo());
} catch (MessagingException e) {
logger.error("发送邮件时发生异常!",e);
}
}
}
发送邮件(验证码为例)
@RestController
@RequestMapping("/send-mail")
public class SendMailController {
@Autowired
private SendMailService sendMailService;
// 也可以配置到application.yml文件中,使用@Value进行读取
private static final String TEXT = "您的验证码是%d,请打死都不要对别人说,不然就让门酱和你设问";
@PostMapping("/simple")
public void SendSimpleMessage(@RequestBody MailRequest mailRequest) {
Random random = new Random();
int randomNumber = random.nextInt(100000) + 100000;
String text = TEXT.replace("%d", randomNumber + "");
mailRequest.setText(text);
sendMailService.sendSimpleMail(mailRequest);
}
@PostMapping("/html")
public void SendHtmlMessage(@RequestBody MailRequest mailRequest) { sendMailService.sendHtmlMail(mailRequest);
}
}
发送简单邮件(以上述代码为例,实际可修改)
指定sendTo和subject即可
{
"sendTo": "xxx@qq.com",
"subject": "验证码"
}
发送html格式文件,可带附件(以上述代码为例,实际可修改)
{
"sendTo": "xxx@qq.com",
"subject": "测试",
"text": "测试附件",
// 文件在本机磁盘中的路径
"filePath": "C:\\Users\\33307\\OneDrive\\桌面\\springBoot学习日记.md"
}