Affects: \5.2.8.RELEASE


I've encountered the following issue in org.springframework.mail.javamail.MimeMessageHelper#addAttachment(java.lang.String, javax.activation.DataSource):

The attachment filename ist added to the MimeBodyPart after calling MimeUtility.encodeText(): mimeBodyPart.setFileName(MimeUtility.encodeText(attachmentFilename));

For longer filenames with non-ASCII characters like german umlauts, this results in a wrong encoding of the filename.

Example: Filename is: xxxxxxxxxxxxxxxxx xxxxxäxßxxxxx xxxxxxx.pdf

This get's encoded as:

Content-Type: application/pdf;
name*0="=?UTF-8?Q?xxxxxxxxxxxxxxxxx=5Fxxxxx=C3=A4u=C3=9Fxxxxx=5Fxxx";
name*1="xxxx.pdf?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename*0="=?UTF-8?Q?xxxxxxxxxxxxxxxxxx=5Fxxxxx=C3=A4x=C3=9Fxxxxx=5Fxxx";
filename*1="xxxx.pdf?="

Please note: - The encoded filename starts with =?UTF-8?Q?, which implies encoding according to RFC-1342 - The encoded filename is splitted into two lines, indicated by the parameter name suffiexes 0 and 1. This implies encoding accroding to RFC-2231.

This mix of encodings is invalid and it leads to a faulty display of attachment filenames in mailclients, most prominently perhaps Microsoft Outlook. Please refer to the javamail FAQ for more details: https://javaee.github.io/javamail/FAQ#encodefilename

Would it be possible to remove the call to MimeUtility.encodeText from this method or make it optional?

(edit: fixed typos)

Comment From: jhoeller

Good point, this is rather outdated. I'm introducing a setEncodeFilenames(boolean) method on MimeMessageHelper for 5.2.9, making this configurable but leaving the current default behavior as true... and considering a default change to false in 5.3.

Comment From: achimbitzer

Thank you for your quick reply!