javax.mail.BodyPart getfileName返回null

时间:2018-03-22 20:35:22

标签: java javamail mime-types mime mime-message

我正在尝试使用

阅读内容类型
javax.mail.Multipart multipart = (MimeMultipart) mimeMessage.getContent(); //javax.mail.internet.MimeMessage
BodyPart bodyPart = multipart.getBodyPart(index);

当内容类型分为两行时,它返回文件名为Null(我认为80个字符的最大限制导致了这个)

注意:如果我在同一行手动移动名称,它可以正常工作。

有没有办法控制此行为?

这个我能读取文件名

Content-Type: application/pdf; name="abcdefghijk Application-Henry Gotter.pdf"
Content-Description: abcdefghijk Application-Henry Gotter.pdf
Content-Disposition: attachment;
filename="abcdefghijk Application-Henry Gotter.pdf"; size=418197;
creation-date="Fri, 09 Mar 2018 14:59:50 GMT";
modification-date="Thu, 22 Mar 2018 13:40:06 GMT"
Content-Transfer-Encoding: base64

这个我无法读取文件名

Content-Type: application/pdf;
name="abcdefghijk Suitability - Henry Gotter.pdf"
Content-Description: abcdefghijk Suitability - Henry Gotter.pdf
Content-Disposition: attachment;
filename="abcdefghijk Suitability - Henry Gotter.pdf"; size=418960;
creation-date="Fri, 09 Mar 2018 15:03:07 GMT";
modification-date="Thu, 22 Mar 2018 13:40:07 GMT"
Content-Transfer-Encoding: base64

提前致谢。

1 个答案:

答案 0 :(得分:2)

根据RFC 2822,第2.2.3节。长标题字段:

  

每个标题字段在逻辑上是一行字符,包括字段名称,冒号和字段正文。然而,为了方便起见,并且为了处理每行的998/78字符限制,可以将头字段的字段主体部分分成多行表示;这被称为“折叠”。一般规则是,无论此标准允许折叠空白区域(不仅仅是WSP字符),都可以在之前插入CRLF 任何WSP。

     

例如,标题字段:

     
Subject: This is a test
     

可以表示为:

     
Subject: This
 is a test

所以,延续线,例如, name=必须以空格开头。

您显示的标题无效。修复生成它们的代码。