修复文件附件的名称

时间:2013-04-19 14:01:42

标签: java email encoding playframework javamail

我有一个quartz cron作业,可以在特定时间间隔内轮询来自服务器的电子邮件。它递归,并提取所有附加的文件并保存。

它与95%的用户配合得很好,但有时,我会收到电子邮件,其附件的名称以不同的格式编码,例如:

=?windows-1252?Q?This_is_nice?windows-1252?Q?=2Em4v?=

我很确定他们看起来很好,当他们被发送时

如何将这些乱码文件名再次转换为可读文本,以便我可以正确设置文件名?

我正在使用基本的JavaMail功能(Part.getFileName())

3 个答案:

答案 0 :(得分:0)

看起来文件名中的某些字符无法用电子邮件中使用的编码表示。您是否明确为邮件设置了文本编码,如果没有尝试按照建议here将其设置为UTF-8。

答案 1 :(得分:0)

那里发生了一些严重的腐败现象。什么程序发送这些消息?它看起来好像有些程序试图对文件名进行两次编码。可能是一些垃圾邮件发送者试图在Windows中触发一些错误。

在这种情况下,你几乎不得不求助于启发式。当您获得异常时,您可以提取原始标头并尝试任何您想要解码标头的内容。如果文件名以可预测的方式被破坏,您可能可以撤消损坏,然后使用MimeUtility方法对其进行解码。

答案 2 :(得分:0)

这不是腐败。如果指定了文件名的字符集和编码,我建议您使用正则表达式来检测和清除文件名。

  

“=?” charset“?”编码“?”编码文本“?=”

请参阅http://tools.ietf.org/html/rfc2047