使用SpringBoot整合邮件服务器发送邮件
本文主要使用网易163的邮件服务, 首先在
https://mail.163.com/
上注册一个账号,并且进入设置开启图下两项服务,获取到相关的授权码为后续整合使用
引入以下依赖使用
<!--邮件模块依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
以下为yml文件中的配置
spring:
mail:
host: smtp.163.com
#服务协议
protocol: smtp
username: xxxxxxxxxx@163.com #你注册的网易邮箱
password: xxxxxxxxxx #你获取到的授权码
test-connection: true
from:
properties.mail.smtp.starttls.enable: true
properties.mail.smtp.starttls.required: true
properties.mail.smtp.ssl.enable: true
default-encoding: utf-8
发送简单文本邮件
/**
* 邮件VO类
*/
@Data
public class MailVo{
private String id;//邮件id
private String from;//邮件发送人
private String to;//邮件接收人
private String subject;//邮件主题
private String text;//邮件内容
private Date sentDate;//发送时间
private String cc;//抄送
private String bcc;//密送
private String status;//状态
private String error;//报错信息
@JsonIgnore
private MultipartFile[] multipartFiles;//邮件附件
}
@RestController
@RequestMapping("/mail/api/")
public class MailController {
@Value("${spring.mail.username}")
private String from;
@Autowired
private MailService mailService;
@PostMapping("sendMessage/info")
public Result sendMessageInfo(@RequestBody MailVo mailVo){
mailVo.setFrom(from); // 设置邮件发送方
MailVo mailVo1 = mailService.sendMail(mailVo);
return Result.ok(mailVo1);
}
}
@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender mailSender;
@Override
public MailVo sendMail(MailVo mailVo) {
//创建简单邮件消息
SimpleMailMessage message = new SimpleMailMessage();
//谁发的
message.setFrom(mailVo.getFrom());
//谁要接收
message.setTo(mailVo.getTo());
//邮件标题
message.setSubject(mailVo.getSubject());
//邮件内容
message.setText(mailVo.getText());
mailSender.send(message);
return mailVo;
}
}
通过swagger或者postman进行测试就可以在接收信息的邮箱查看相关信息。
/**
* 附件发送测试
*/
@PostMapping("sendMessage")
public Result sendMessage(MultipartFile multipartFile){
MailVo mailVo=new MailVo();
mailVo.setFrom(from);
mailVo.setSubject("测试文档");
mailVo.setTo("<1918415339@qq.com>");// <1918415339@qq.com>
mailVo.setText("测试邮箱发送文件");
MailVo mailVo1 = mailService.sendMailPng(mailVo,multipartFile);
return Result.ok(mailVo1);
}
/**
* 附件发送
*/
@Override
public MailVo sendMailPng(MailVo mailVo,MultipartFile multipartFile) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 谁发送的信息
helper.setFrom(mailVo.getFrom());
// 谁接收
helper.setTo(mailVo.getTo());
// 邮件标题
helper.setSubject(mailVo.getSubject());
// 获取到文件全名称包括后缀
String name = multipartFile.getOriginalFilename();
// 邮件内容
helper.setText(mailVo.getText(),true);
// 把附件转换为File
File file = MultipartFileToFile(multipartFile);
FileSystemResource res = new FileSystemResource(file);
// 添加附件
helper.addAttachment(name,res);
// 发送相关邮件
mailSender.send(message);
if (file.exists()) {
file.delete();
}
return mailVo;
} catch (MessagingException e) {
e.printStackTrace();
}
return null;
}
/**
* 将multiFile转为File对象
*/
private File MultipartFileToFile(MultipartFile multiFile) {
// 获取文件名
String fileName = multiFile.getOriginalFilename();
// 获取文件后缀
String prefix = fileName.substring(fileName.lastIndexOf("."));
// 若需要防止生成的临时文件重复,可以在文件名后添加随机码
try {
// File file = File.createTempFile(fileName, prefix);
File file=new File(fileName);
FileUtils.copyInputStreamToFile(multiFile.getInputStream(),file);
return file;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
最终测试结果