本文将介绍spring官方提供的集成了邮件服务的JavaMailSenderImpl
,开箱即用,十分方便。
一、开启邮件服务
开启POP3/SMTP/IMAP服务。以QQ邮箱为例,登录QQ邮箱,然后设置 ---> 账户:
开启邮件服务开启后点击“生成授权码”,记住授权码。
欢迎大家关注我的公众号 javawebkf,目前正在慢慢地将简书文章搬到公众号,以后简书和公众号文章将同步更新,且简书上的付费文章在公众号上将免费。
二、springBoot整合邮件服务
1、pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、application.yml:
# 端口&根路径
server:
port: 8888
servlet:
context-path: /
spring:
application:
# 服务名
name: java-mail-sender
mail:
#邮箱的SMTP服务器地址
host: smtp.qq.com
#登录账号
username: 你QQ邮箱登录账号
#授权码或者密码
password: 刚才获取的授权码
properties:
#真实邮箱
from: 你的QQ邮箱
#限制上传和请求文件的大小
servlet:
multipart:
max-file-size: 10MB
max-request-size: 50MB
3、封装的返回对象JsonResult:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class JsonResult {
private Integer code;
private String msg;
private Object data;
public JsonResult(Integer code, String msg) {
super();
this.code = code;
this.msg = msg;
}
}
4、返回信息&返回码枚举类:
@Getter
@AllArgsConstructor
public enum ResultEnum {
SUCCESS(200,"成功"),
SERVER_ERROR(500,"内部异常"),
BAD_REQUEST(400,"参数错误"),
;
private Integer code;
private String msg;
}
5、用来接收邮件内容的表单对象:
@Data
public class MailForm {
private String id;
// 发件人
private String from;
// 收件人
@NotBlank(message = "收件人不能为空!")
@Pattern(regexp = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?", message = "邮箱格式不正确!")
private String to;
// 主题
@NotEmpty(message = "邮件主题不能为空!")
private String subject;
// 内容
@NotEmpty(message = "邮件内容不能为空!")
private String text;
// 抄送
private String cc;
// 暗抄送
private String bcc;
// 时间
private Date date;
// 附件
@JsonIgnore
private MultipartFile[] multipartFiles;
}
6、发送邮件的service:
@Service
@Slf4j
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSenderImpl mailSender;
@Override
public void sendMail(MailForm mailForm) {
try {
MimeMessageHelper messageHelper = new MimeMessageHelper(mailSender.createMimeMessage(), true);
// 从配置文件读取发件人
getMailSendFrom(mailForm);
// 设置发件人
messageHelper.setFrom(mailForm.getFrom());
// 设置收件人
messageHelper.setTo(mailForm.getTo().split(","));
// 设置主题
messageHelper.setSubject(mailForm.getSubject());
// 设置内容
messageHelper.setText(mailForm.getText());
// 设置抄送
if (!StringUtils.isEmpty(mailForm.getCc())) {
messageHelper.setCc(mailForm.getCc().split(","));
}
// 设置暗抄送
if (!StringUtils.isEmpty(mailForm.getBcc())) {
messageHelper.setCc(mailForm.getBcc().split(","));
}
// 设置附件
if (mailForm.getMultipartFiles() != null) {
for (MultipartFile multipartFile : mailForm.getMultipartFiles()) {
messageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile);
}
}
// 设置日期
if (mailForm.getDate() == null) {
mailForm.setDate(new Date());
messageHelper.setSentDate(mailForm.getDate());
}
// 发送邮件
mailSender.send(messageHelper.getMimeMessage());
log.info("发送邮件成功:{} ---> {}", mailForm.getFrom(), mailForm.getTo());
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
/**
* 从配置文件中获取发件人
* @return
*/
private String getMailSendFrom(MailForm mailVo) {
String from = mailSender.getJavaMailProperties().getProperty("from");
mailVo.setFrom(from);
return from;
}
}
7、发送邮件的controller:
@RestController
@RequestMapping("/java-mail")
@Slf4j
public class MailController {
@Autowired
private MailService mailService;
@PostMapping("/mail")
public JsonResult sendMail(@Valid MailForm mailForm, BindingResult bindingResult) {
try {
if (bindingResult.hasErrors()){
log.error("【sendMail】" + ResultEnum.BAD_REQUEST.getMsg() + ",msg={}",bindingResult.getFieldErrors());
return new JsonResult(ResultEnum.BAD_REQUEST.getCode(),bindingResult.getFieldError().getDefaultMessage());
} else {
mailService.sendMail(mailForm);
return new JsonResult(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMsg());
}
} catch (Exception e) {
log.error(e.getMessage());
return new JsonResult(ResultEnum.SERVER_ERROR.getCode(), ResultEnum.SERVER_ERROR.getMsg());
}
}
}
三、测试
打开postman,设置相关参数,访问上面这个controller,就可以愉快地发邮件了。
网友评论