【发布时间】: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