发出使用javaMail检索附件文件名的问题

时间:2013-01-28 16:21:01

标签: java javamail attachment

我有一个应该处理一些邮件的插件,所以我需要从imap邮件中获取附件并做一些事情。

所有似乎都工作,但我有一个邮件有一个奇怪的附件标题,我无法正确,这里的附件标题:

    --_01d0aeb2-3f01-4153-9121-66b7af6924f1_
Content-Type: application/msword
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=
    "=?iso-8859-1?Q?Atto_Aziendale_(xxx=E0_del_xxx_xxx_-_xxx)=2C_Pr?=
 =?iso-8859-1?Q?of.xxx_xxx_-_Dr.xxx_xxx.doc?="

“x”用于隐私,但这不应该很重要,问题是当我尝试使用javaMail获取此附件的文件名时:

Attachment att = new Attachment(mailPart);
String filename = att.getFilename();

我只得到这个:“Atto Aziendale(xxx del xxx xxx - xxx),Pr”

似乎没有阅读第二行。

我还试图以另一种方式获取文件名:

mailPart.getHeader("Content-Disposition").getAttribute("filename").toString();

并返回:filename =“=?iso-8859-1?Q?Atto_Aziendale_(xxx = E0_del_xxx_xxx _-_ xxx)= 2C_Pr?==?iso-8859-1?Q?of.xxx_xxx _-_ Dr.xxx_xxx。 DOC?=“

所以看起来该属性被正确加了,但如果我试图得到:

mailPart.getHeader("Content-Disposition").getAttribute("filename").getValue();

然后我再次得到一个截断的文件名:“Atto Aziendale(xxx del xxx xxx - xxx),Pr”

谁知道如何获取完整的文件名或如何解码文件名属性?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

如果您正在使用IMAP,则IMAP服务器正在解析邮件头并将解析后的值返回给JavaMail客户端。您的Content-Disposition标头有几个延续行。 IMAP服务器需要正确组合这些延续行并返回参数值。看起来服务器省略了延续线所隐含的空白并加入"?="使用" =?"。它们之间没有空格,它们似乎是一个编码的单词而不是两个,这可能解释了为什么在解码它们时会得到错误的结果。

尝试设置系统属性" mail.mime.decodetext.strict"到"假&#34 ;;这可能允许JavaMail解码该值。有关详细信息,请参阅javadocs for the javax.mail.internet package