虽然 Spring Boot 提供了邮件相关的功能,但在缺少部分配置的情况下或多或少会有一些问题,如附件的文件名乱码、文件格式等问题。本文提供统一解决这类问题的配置。
Maven 依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 1. 配置文件 以 QQ 邮箱为例:
spring: mail: host: smtp.qq.com port: 465 username: [email protected] # 发送邮箱账户 password: exmaplepassword # 申请的授权码 properties: mail: smtp: socketFactory: port: 465 class: javax.net.ssl.SSLSocketFactory ssl: enable: true starttls: enable: true required: true 2. 封装统一工具类 /** * @author Kytrun * @version 1.0 * @date 2022/07/25 16:14 */ @RequiredArgsConstructor @Component public class MailUtil { private final JavaMailSender mailSender; @Value("${spring.mail.username}") private String mailFrom; // 长文件名不截断 static { System.getProperties().setProperty("mail.mime.splitlongparameters", "false"); } /** * 发送纯文字邮件 * * @param to 收件地址 * @param subject 主题 * @param text 内容 */ public void send(String to, String subject, String text) { SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setTo(to); mailMessage.setSubject(subject); mailMessage.setSentDate(new Date()); mailMessage.setText(text); mailMessage.setFrom(mailFrom); mailSender.send(mailMessage); } /** * 发送带多个附件的邮件 * * @param to 收件地址 * @param subject 主题 * @param text 文字内容 * @param fileList 文件列表 * @throws MessagingException * @throws UnsupportedEncodingException */ public void send(String to, String subject, String text, List<MultipartFile> fileList) throws MessagingException, UnsupportedEncodingException { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true); messageHelper.setFrom(mailFrom); messageHelper.setTo(to); messageHelper.setSubject(subject); messageHelper.setText(text); if (fileList != null && !fileList.isEmpty()) { for (MultipartFile file : fileList) { String fileName = file.getOriginalFilename() == null ? "文件" : file.getOriginalFilename(); //解决中文附件名的问题 fileName = MimeUtility.encodeText(fileName); messageHelper.addAttachment(fileName, file); } } mailSender.send(mimeMessage); } }