javamail BASE64DecoderStream 解码问题

javamail BASE64DecoderStream decode issue

发现 javamail 中的 Base64DecoderStream 存在问题。我收到的一些邮件内容是这样的:

Content-Type: text/plain; charset=3D"utf-8"
Content-Transfer-Encoding: base64

QmFzZTY0IGlzIGEgZ2VuZXJpYyB0ZXJtIGZvciBhIG51bWJlciBvZiBzaW1pbGFyIGVuY29kaW5=
    n
    IHNjaGVtZXMgdGhhdCBlbmNvZGUgYmluYXJ5IGRhdGEgYnkgdHJlYXRpbmcgaXQgbnVtZXJpY2F=
    s
    bHkgYW5kIHRyYW5zbGF0aW5nIGl0IGludG8gYSBiYXNlIDY0IHJlcHJlc2VudGF0aW9uLiBUaGU=
    g
    QmFzZTY0IHRlcm0gb3JpZ2luYXRlcyBmcm9tIGEgc3BlY2lmaWMgTUlNRSBjb250ZW50IHRyYW5=
    z
    ZmVyIGVuY29kaW5nLg==

理想情况下,下一行中的 = 符号应该替换为单个字符,但 gsuite(Gmail) 有时会这样做。这会导致 Base64DecoderStream 损坏消息。但是,Outlook 和许多流行的在线 base64 解码器可以很好地处理这种 base64 内容。这可以修复吗?

额外的细节是私下提供的,这使我能够确定问题在于邮件包含 MIME 类型 message/rfc822 的附件(原始邮件),并且该附件使用了 Content-Transfer-Encoding引用可打印。 MIME 规范不允许对该类型的 MIME 内容使用该编码。这违反了 Google 确实需要修复的 MIME 规范。如果他们自己还没有弄明白,请向他们提供这些附加信息。

RFC 2046 第 5.2.1 节说:

No encoding other than "7bit", "8bit", or "binary" is permitted for the body of a "message/rfc822" entity.

同时,您可以将 JavaMail 系统 属性 mail.mime.allowencodedmessages 设置为 "true" 以解决 GSuite 中的这个错误。