【问题标题】:javax.mail.BodyPart getfileName returns nulljavax.mail.BodyPart getfileName 返回 null
【发布时间】:2018-09-01 10:36:07
【问题描述】:

我正在尝试使用

读取内容类型
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

提前致谢。

【问题讨论】:

  • name=filename= 真的各自为政吗?如果没有,请编辑问题并显示 real 标题。如果是这样,那么这是错误的标题,因为换行结束了标题 line。修复生成标题行的代码,以不将标题 line 分成两个 lines
  • 感谢您的回复,我已经在同一个电子邮件文件中使用两个标题更新了问题,第一个我能够读取文件名,而其他返回 null

标签: java jakarta-mail mime-types mime mime-message


【解决方案1】:

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

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

例如头域:

Subject: This is a test

可以表示为:

Subject: This
 is a test

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2019-08-21
    • 2020-06-19
    相关资源
    最近更新 更多