JavaMail 主题编码

JavaMail subject encoding

在我的项目中,我从 Thunderbird 下载了一封我的个人电子邮件。我用我的文本编辑器打开它,电子邮件主题如下所示:

=?utf-8?B?some_chars_here_1==?==?utf-8?B?some_chars_here_2?=

我用字符串 some_chars_here_1 和 some_chars_here_2.
隐藏了实际字符 我是这样读消息的:

Session session = Session.getDefaultInstance(new Properties());
InputStream inputStream = new FileInputStream(pathToFile);
MimeMessage message = new MimeMessage(session, inputStream);

当我试图通过

获取电子邮件主题时
message.getSubject()

我得到类似的东西:

first_part_well_encoded=?utf-8?B?some_chars_here_2?=

所以我是这样做的:

public String getSubject(MimeMessage message) {
    String subject = message.getHeader("Subject", null);
    String parts[] = subject.split("\=\?u");
    StringBuilder stringBuilder = new StringBuilder();
    for (String string : parts) {
        if (string.length() > 3) {
            string = "=?u" + string;
            stringBuilder.append(
                     MimeUtility.decodeText(MimeUtility.unfold(string)));
        }
    }
    return stringBuilder.toString();
} 

现在主题是正确的。我想知道:这是执行此操作的最佳方法吗?

创建该邮件的邮件程序已损坏。两个编码字之间应该有一个space。请将此错误报告给邮件程序的所有者。

要解决此问题,请尝试将系统 属性 mail.mime.decodetext.strict 设置为 false