我努力通过Spring的MimeMessageHelper发送电子邮件,并附带带有来自不同语言的字符的附件:
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED, StandardCharsets.UTF_8.name());
// ...
helper.addAttachment("éàè öäü русский алфавит.pdf", bytes, "application/pdf");
无论我做什么,Gmail中的文件名总是显示为:
?UTF-8?B?0JDQutGC0LXRgNGLLdCb0Y7QutGB0LXQvNCx0YPRgA==?= =?UTF-8?B?0LMtMjAxOS0xMSDQvNCw0Y8ucGRm?=
我尝试过:
MimeUtility.encodeText("éàè öäü русский алфавит.pdf", StandardCharsets.UTF_8.name(), "Q");
MimeUtility.encodeWord(...) // same result
并设置:
System.setProperty("mail.mime.splitlongparameters", "false");
System.setProperty("mail.mime.encodeparameters", "false"); // or true
System.setProperty("mail.mime.charset", "utf-8");
不做任何更改。
如果我从文件名中删除非西里尔字符(éàèöäü),则文件名编码正确,只是没有任何MimeUtility.encode调用。
但是在我的用例中,我可以使用多种语言的文件名。
即使我将éàè öäü русский алфавит.pdf
更改为2019 русский алфавит.pdf
,文件名的显示仍然很糟糕。但是只需离开русский алфавит.pdf
即可使其在Gmail中正确显示。
那是为什么?
我在Fedora 30上使用Spring Boot 1.5.21和Java 8。