赞
踩
本文主要使用网易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; }
最终测试结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。