文章目录
项目环境:SpringBoot (2.2.5.RELEASE)
接收邮件客户端: foxmail(版本不一)
服务部署方式:docker tomcat 容器
邮件发送简单实现
伪代码思路:
- 定义邮件基本信息,主题、发送人、接收人、正文
- 根据入参从服务器上获取文件,并添加成邮件附件
File baseDir = null;
try {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject(subject); // 邮件主题
helper.setFrom(emailFrom); // 发送人
helper.setTo(receiver); // 接收人
// 添加正文
helper.setText(content, true);
// 添加附件
String baseDirPath = String.format("upload/");
File baseDir = new File(baseDirPath);
if (baseDir != null && !baseDir.exists()) {
baseDir.mkdirs();
}
File dlFile = new File(baseDirPath + "/" + dlFileName);
FileSystemResource file = new FileSystemResource(dlFile);
helper.addAttachment(dlFileName, file);
helper.setSentDate(DateUtil.date());
// 发送邮件
javaMailSender.send(mimeMessage);
} catch (Exception e) {
log.warn("发送邮件异常,{}", e);
throw e;
}
问题
附件名变为ATT_00001.dat
找了网上一堆解决方案,都说是说附件名称过长(超过60个字符)会产生这个问题,然而本文出现的附件名称未超过60个字符,所以并不是这个问题产生的!
foxmail 版本差异
后来想着,接收邮件的foxmail客户端是不是有版本差异,然后让测试姐姐和开发们都发了一下版本号!真相终于出来啦~ 客户端版本号问题
客户端安装者 | 版本号 |
---|---|
测试小姐姐 | 7.2 Build9.156 |
程序媛&&程序猿 | 7.2.18.95及以上 |
附件名乱码
这一次附件长度是真的超过60个字符了,按照网上的说法参数mail.mime.splitlongparameters 在linux下 会默认为 true,要将mail.mime.splitlongparameters
设置为false
!
docker tomcat部署 SpringbootApplication 中添加配置无效
激动万分的加了配置,跑了流水线,结果还是有问题!WHY!后来经过大神们的提醒,服务在linux上tomcat容器中部署,不是调用Springboot内嵌的tomcat,所以不会走SpringbootApplication里面的方法。。。
@Slf4j
@SpringBootApplication
@ComponentScan(basePackages={
"com.lizzy"})
public class SpringbootApplication extends SpringBootServletInitializer {
public static void main(String[] args) throws UnknownHostException {
initProperty();
ConfigurableApplicationContext application = SpringApplication.run(SpringbootApplication.class, args);
// ...
}
private static void initProperty() {
System.setProperty("mail.mime.splitlongparameters", "false");
}
在服务启动前加配置 - 静态代码(完美解决)
找个适合的位置,把这段静态代码加上,完美解决问题!
static {
// 初始化系统设置
System.setProperty("mail.mime.splitlongparameters", "false");
}