我在Web应用程序中使用JavaMail(版本1.5)。
用户通过file
表单上的input
html
元素上传文件。
然后我通过电子邮件发送文件。我使用与通过表单附加的文件相同的名称(即:我没有给它一些自定义名称)。
有些用户使用非拉丁文件名上传文件。
据我所知,除非我正在操作原始标头,否则JavaMail不需要特殊的编码/解码。因此,我通过mimeBodyPart.setFileName(fileName)
设置附件的文件名,而不对文件名进行编码。
但是,这会导致文件名在收到的电子邮件中显示为问号或下划线。
测试打印fileName
到控制台或系统文件夹会正确显示文件名。
我尝试过的事情
我尝试在应用的ServletContextListener
中将“mail.mime.encodefilename”和“mail.mime.decodefilename”设置为true。
我尝试使用MimeUtility
方法encodeText(text,charset, encoding)
。
这工作并正确地显示了文件名,但偶尔它会完全破坏文件名:而不是问号或下划线,它会使整个文件名看起来像 “= _UTF-8_B_16rXqNeS15XXnSDXnNeg15zXlCAt157XmdeV157XoNeV16og15 ___ ___ filename_1 = __ 4 ......”
我做了大量的测试,试图找出造成这种乱码的原因但无法获得一致的结果(测试浏览器和文件名长度)。我怀疑在测试期间有些东西被缓存,因为结果不一致。
Java
Part
方法getSubmittedFileName()
和js脚本获取文件名。有什么建议吗?
示例标题:
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。