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
。
在我的项目中,我从 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
。