0

我有一个石英cron作业,可以在特定时间间隔内从服务器轮询电子邮件消息。它递归地进行,并提取所有附加文件并保存它们。

它适用于其中的 95%,但有时,我会收到电子邮件,其附件名称以不同的格式编码,例如:

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

而且我很确定他们看起来不错,当他们被发送时

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

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

4

3 回答 3

0

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

在这种情况下,您几乎必须求助于启发式方法。当您遇到异常时,您可以提取原始标头并尝试对标头进行解码。如果文件名以可预测的方式损坏,您可能能够撤消损坏,然后使用 MimeUtility 方法对其进行解码。

于 2013-04-19T21:37:56.373 回答
0

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

于 2013-04-19T14:06:03.987 回答
0

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

“=?” 字符集“?” 编码“?” 编码文本“?=”

https://www.rfc-editor.org/rfc/rfc2047

于 2013-04-19T21:58:43.563 回答