编码混合语言附件文件名

时间:2019-05-21 21:18:29

标签: java encoding javamail

我努力通过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。

0 个答案:

没有答案