非拉丁语中的JavaMail文件附件未正确显示

时间:2017-11-09 07:09:22

标签: java email encoding javamail

我在Web应用程序中使用JavaMail(版本1.5)。

用户通过file表单上的input html元素上传文件。

然后我通过电子邮件发送文件。我使用与通过表单附加的文件相同的名称(即:我没有给它一些自定义名称)。

有些用户使用非拉丁文件名上传文件。

据我所知,除非我正在操作原始标头,否则JavaMail不需要特殊的编码/解码。因此,我通过mimeBodyPart.setFileName(fileName)设置附件的文件名,而不对文件名进行编码。

但是,这会导致文件名在收到的电子邮件中显示为问号或下划线。 测试打印fileName到控制台或系统文件夹会正确显示文件名。

我尝试过的事情

  1. 我尝试在应用的ServletContextListener中将“mail.mime.encodefilename”和“mail.mime.decodefilename”设置为true。

  2. 我尝试使用MimeUtility方法encodeText(text,charset, encoding)

  3. 这工作并正确地显示了文件名,但偶尔它会完全破坏文件名:而不是问号或下划线,它会使整个文件名看起来像 “= _UTF-8_B_16rXqNeS15XXnSDXnNeg15zXlCAt157XmdeV157XoNeV16og15 ___ ___ filename_1 = __ 4 ......”

    我做了大量的测试,试图找出造成这种乱码的原因但无法获得一致的结果(测试浏览器和文件名长度)。我怀疑在测试期间有些东西被缓存,因为结果不一致。

    1. 我尝试从Java Part方法getSubmittedFileName()和js脚本获取文件名。
    2. 有什么建议吗?

      示例标题:

        

      Content-Type:application / x-any;   name =“=?UTF-8?B?16TXlCDXoteV15Mg157Xmdec15nXnSDXnA ==?= =?UTF-8?B?1 \”;   name * 1 = \“5DXqNeV15og157Xodek16guZG9jeA ==?=”Content-Transfer-Encoding:   base64内容 - 处理:附件;   文件名=“=?UTF-8 2 B 4 16TXlCDXoteV15Mg157Xmdec15nXnSDXnA ==?=   =?UTF-8?B?1 \“; filename * 1 = \”5DXqNeV15og157Xodek16guZG9jeA ==?=“

      用于查看收到的电子邮件的客户:Gmail网站,Microsoft Outlook。

0 个答案:

没有答案