一、背景
最近用到了使用jakarta.mail发送邮件,带有附件的模式,整体流程都没问题,但是收到的附件名称有时候会乱码。
情况1:通过重试测试,发现附件文件名只要超过8个,就会乱码。
第二个乱码图:
情况二:不能预览,被截取了的感觉
二、MimeUtility.encodeText
本身这个方法的定义就是解决中文名乱码,但是对于邮件附件名貌似不起作用。
三、解决办法
1)System.getProperties().setProperty(“mail.mime.splitlongparameters”, “false”);
来设置邮件附件名过长不被自动截取的问题,(默认是true自动截取,设置为false不截取)
注意:使用的时候,要将其放到关键词如下图的上方,不然可能不会生效。
2)避免中文名乱码
如下代码替换单独的MimeUtility.encodeText,然后则会解决问题。
String filename = MimeUtility.encodeText(reportName+"报告_" + patientName + ".pdf");
filename = filename.replaceAll("\r", "").replaceAll("\n", "");
messageBodyPart.setFileName(filename);
四、总结
具体问题具体分析,最开始我还觉得是协议的问题,有时候QQ邮箱和163邮箱,同一个触发,收到的文件名都不一样,可能也有点关系吧,等回头有空详细了解。