【问题标题】:Mail subject not decoded if starts with =?UTF-8?B? javamail 1.5.6如果以 =?UTF-8?B? 开头,邮件主题未解码?邮箱 1.5.6
【发布时间】:2019-10-29 23:54:31
【问题描述】:

我有一封带有以下标题主题的邮件

Subject: =?UTF-8?B?UmlmLiBQcmF0LjogNDhBVi04MDc5IEF0dHJhdmVyc2FtZW50byB0ZWxlZm9uaWNvIHN1cGVyaW9yZSwgaW4gY2F2ZWRpbyBlc2lzdGVudGUsIGNvbiBjYXZpIGEgRi5PLiBhbCBrbSA2NCs0MjAgZGVsbGEgbGluZWEgZmVycm92aWFyaWEgQVYvQUMgVG9yaW5vIC0gTWlsYW5vIG5lbCBDb211bmUgZGkgR3JlZ2dpbyAgW1JGSS1EUFItRFRQX1RPLklOR1xQRUNcUFwyMDE5XDAwMDUyNDRd=?=

我正在使用 javamail 1.5.6 对其进行解析并解析该标头,引发异常,导致未解析的主题:

MimeUtility 类 decodeWord 方法第 928 行

com.sun.mail.util.DecodingException: BASE64Decoder: 编码流中的错误:需要至少 2 个有效的 base64 字符,但在填充字符 (=) 之前只有 0,最近的 10 个字符是:“wMDUyNDRd=”

这似乎是 javamail 解码器中的一个错误,无论如何,如果我用 Outlook 打开该邮件,主题就会被很好地阅读

例如,这可以正常工作:

String rawvalue = "UmlmLiBQcmF0LjogNDhBVi04MDc5IEF0dHJhdmVyc2FtZW50byB0ZWxlZm9uaWNvIHN1cGVyaW9yZSwgaW4gY2F2ZWRpbyBlc2lzdGVudGUsIGNvbiBjYXZpIGEgRi5PLiBhbCBrbSA2NCs0MjAgZGVsbGEgbGluZWEgZmVycm92aWFyaWEgQVYvQUMgVG9yaW5vIC0gTWlsYW5vIG5lbCBDb211bmUgZGkgR3JlZ2dpbyAgW1JGSS1EUFItRFRQX1RPLklOR1xQRUNcUFwyMDE5XDAwMDUyNDRd=?=";

// Get bytes from string 
byte[] byteArray = Base64.decodeBase64(rawvalue.getBytes());

// Print the decoded string  
String decodedString = new String(byteArray); 
System.out.println(rawvalue + " = " + decodedString);

谢谢

【问题讨论】:

    标签: jakarta-mail decoding


    【解决方案1】:

    我找到了解决方案,邮件主题结果无效,至少对于 https://base64.guru/tools/validator

    然后,调试 Javamail 我发现它使用了 com.sun.mail.util.BASE64DecoderStream,它使用了系统属性 mail.mime.base64.ignoreerrors。 然后我尝试将其设置为 true,这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2011-11-26
      • 2012-12-25
      • 2020-11-21
      • 2017-07-15
      • 2012-01-27
      • 2011-05-29
      • 1970-01-01
      • 2015-05-12
      相关资源
      最近更新 更多