我在一个web应用程序中使用JavaMail (版本1.5)。
用户通过file input元素在html窗体上上传文件。
然后我通过电子邮件发送文件。我使用与通过表单附加的文件相同的名称(即:我不给它自定义名称)。
一些用户上传非拉丁文件名的文件。
根据docs,我理解JavaMail不需要特殊的编码/解码,除非我正在操作原始标头。因此,我通过mimeBodyPart.setFileName(fileName)设置附件的文件名,而不对文件名进行编码。
但是,这会导致文件名在收到的电子邮件中显示为问号或下划线。测试将fileName打印到控制台或系统文件夹将正确显示文件名。
Things我试过
ServletContextListener中为true。MimeUtility方法encodeText(text,charset, encoding)。这样做可以正确地显示文件名,但有时它会完全混淆文件名:而不是问号或下划线,它会混淆整个文件名,使其看起来像"=_UTF-8_B_16rXqNeS15XXnSDXnNeg15zXlCAt157XmdeV157XoNeV16og15___ ___filename_1=__4.“
我做了大量的测试,试图找出造成这种混乱的原因,但没有得到一致的结果(对浏览器和文件名长度进行测试)。我怀疑某些东西在测试过程中被缓存,因为结果不一致。
Java Part方法getSubmittedFileName()和js脚本获取文件名。有什么建议吗?
示例标题:
内容类型:application/x;name="=?UTF-8?B?16TXlCDXoteV15Mg157Xmdec15nXnSDXnA==?= =?UTF-8?B?1\";name*1=\"5DXqNeV15og157Xodek16guZG9jeA==?=“内容传输-编码: base64内容-配置:附件;filename="=?UTF-8?B?16TXlCDXoteV15Mg157Xmdec15nXnSDXnA==?= =?UTF-8?B?1\";filename*1=\"5DXqNeV15og157Xodek16guZG9jeA==?=”
客户经常查看收到的电子邮件: Gmail网站,Microsoft。
发布于 2021-09-11 21:54:17
我也面临着同样的问题,能够用java-mail-api-1.6解决这个问题。这似乎不标准,但如果你面对这样的问题,它可能是有用的。
其他选项,如使用:
attachment.setFileName(MimeUtility.encodeText(FileName, "UTF-8", null));
在不同的邮件服务器上表现不佳;结果是随机和混乱的。
下面是我使用的步骤:
步骤1:设置下列属性:
props.put("mail.mime.encodefilename", "true");
props.put("mail.mime.encodeparameters", "false");步骤2:将文件名设置为:
attachment.setHeader("Content-Type", "application/octet-stream;
name=\""+FileName+"\"");
attachment.setHeader("Content-Disposition", "attachment;
filename=\""+FileName+"\"");然后删除其他文件名设置语句,如
attachment.setFileName(FileName);https://stackoverflow.com/questions/47195907
复制相似问题