在javamail中设置“mail.strictly_mime.parm_folding”

问题描述 投票:5回答:2

我使用javamail发送带有长文件名附件的邮件。 javamail相应地响应更新的RFC,并将文件名跨越邮件头的两行,如下例所示:

------=_Part_0_978693914.1433356404377
Content-Disposition: ATTACHMENT;
    filename*0="=?UTF-8?Q?arquivo_com_nome_grande_e_acentua=C3=A7=C3=A3o.png\"; f";
    filename*1="ilename*1=\"?="
Content-Type: APPLICATION/OCTET-STREAM;
    name*0="=?UTF-8?Q?arquivo_com_nome_grande_e_acentua=C3=A7=C3=A3o.png\"; n";
    name*1="ame*1=\"?="
Content-Transfer-Encoding: BASE64

像Outlook这样的邮件客户端不理解它,所以我需要让javamail弃用;将文件名分成两行。

阅读RFC后,我发现了一个不分割的属性:“mail.strictly_mime.parm_folding”

我如何在javamail中设置它?

java email javamail email-attachments
2个回答
5
投票

mail.strictly_mime.parm_folding属性适用于Thunderbird,它不在RFC中。

根据this Thunderbird article, Outlook doesn't support RFC 2231,JavaMail用于编码filename参数。您可以通过将JavaMail System property "mail.mime.encodeparameters"设置为“false”来禁用RFC 2231编码。您可能希望将System属性“mail.mime.encodefilename”设置为“true”以使用Outlook支持的non-standard filename encoding


1
投票

我在Wildfly Server V.10.x上发现了这个问题

通过insert format =“flowed”解决内容类型

MimeBodyPart part = new MimeBodyPart();
part.addHeader("Content-Type", "application/pdf; charset=\"UTF-8\"; format=\"flowed\"  ");
part.setFileName(MimeUtility.encodeText(file.getName(), "UTF-8", null));
//setDataHandler
© www.soinside.com 2019 - 2024. All rights reserved.