准备工作:
加入pom依赖
<!-- 发邮件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
配置
一、开启邮件服务
实体类
@Data
public class MailVo {
private String id;
private String from;
private String to;
private String subject;
private String text;
private Date sentDate;
private String status;
private String error;
@JsonIgnore
private MultipartFile[] multipartFiles;
}
serviceimpl
@Service
@Log4j2
public class MailService {
@Autowired
private JavaMailSenderImpl sender;
/**
* 发送邮件
* @param mailVo
* @return
*/
public MailVo sendMail(MailVo mailVo) {
try {
checkMail(mailVo);
sendMimeMail(mailVo);
return saveMail(mailVo);
} catch (Exception e) {
log.error("发送邮件失败:", e);
mailVo.setStatus("fail");
mailVo.setError(e.getMessage());
return mailVo;
}
}
/**
* 检测邮件 checkMail(); 首先校验邮件收信人、邮件主题和邮件内容这些必填项,若为空则拒绝发送。
* @param mailVo
*/
private void checkMail(MailVo mailVo) {
if (StringUtils.isEmpty(mailVo.getTo())) {
throw new RuntimeException("邮件收信人不能为空");
}
if (StringUtils.isEmpty(mailVo.getSubject())) {
throw new RuntimeException("邮件主题不能为空");
}
if (StringUtils.isEmpty(mailVo.getText())) {
throw new RuntimeException("邮件内容不能为空");
}
}
/**
* 发送邮件具体实现
* @param mailVo
*/
private void sendMimeMail(MailVo mailVo) {
try {
MimeMessageHelper messageHelper = new MimeMessageHelper(sender.createMimeMessage(), true);
mailVo.setFrom(getMailSendFrom());
messageHelper.setFrom(mailVo.getFrom());
messageHelper.setTo(mailVo.getTo().split(","));
messageHelper.setSubject(mailVo.getSubject());
messageHelper.setText(mailVo.getText());
if (mailVo.getMultipartFiles() != null) {
for (MultipartFile multipartFile : mailVo.getMultipartFiles()) {
messageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile);
}
}
if (mailVo.getSentDate()==null) {
mailVo.setSentDate(new Date());
messageHelper.setSentDate(mailVo.getSentDate());
}
sender.send(messageHelper.getMimeMessage());
mailVo.setStatus("ok");
log.info("发送邮件成功:{}->{}", mailVo.getFrom(), mailVo.getTo());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 保存到数据库
* @param mailVo
* @return
*/
private MailVo saveMail(MailVo mailVo) {
System.out.println(mailVo);
String[] split = mailVo.getTo().split(",");
for(String i:split) {
mailVo.setTo(i);
System.out.println(i);
// insert
}
return mailVo;
}
/**
* 取到yml中的from中的value值
*
* @return
*/
public String getMailSendFrom() {
return sender.getJavaMailProperties().getProperty("from");
}
}
controller
@RestController
@RequestMapping("/email")
@Log4j2
@Api(tags="email")
public class MailController {
@Autowired
private MailService mail;
@PostMapping("/sendmail")
MailVo sendMail( MailVo mailVo) {
log.info("开始使用邮件");
return mail.sendMail(mailVo);
}
}
postman测试
效果就系这样纸的啦~