Я стараюсь отправить электронное письмо с 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.
Почему это так?
Я использую Spring Boot 1.5.21 и Java 8 на Fedora 30.