JavaMail 搜索 returns BADCHARSET

JavaMail SEARCH returns BADCHARSET

我在工作中使用 JavaMail 开发了一个电子邮件客户端。一些客户报告说,在搜索具有非英语字符(例如 "Kühlgut")的主题时会出现大量延迟。

事实证明,某些邮件提供商(在本例中为 Office 365)不支持使用 UTF-8 字符集进行搜索(导致 BadCommandException)。因此,JavaMail 在本地获取并执行搜索(作为回退)。

此行为导致大量延迟。

代码:

String searchTerm = "Kühlgut";
SearchTerm[] searchTerms = new SearchTerm[3];
searchTerms[0] = new FromStringTerm(searchTerm);
searchTerms[1] = new SubjectTerm(searchTerm);
searchTerms[2] = new BodyTerm(searchTerm);

OrTerm orTerm = new OrTerm(searchTerms);
folder.search(orTerm);

搜索命令的 JavaMail 调试输出:

C18 SEARCH CHARSET UTF-8 OR OR FROM {8+}
Kühlgut SUBJECT {8+}
Kühlgut BODY {8+}
Kühlgut ALL
C18 NO [BADCHARSET (US-ASCII)] The specified charset is not supported.
C19 SEARCH CHARSET Cp1252 OR OR FROM {7+}
Kühlgut SUBJECT {7+}
Kühlgut BODY {7+}
Kühlgut ALL
C19 NO [BADCHARSET (US-ASCII)] The specified charset is not supported.

B20 FETCH 1 (ENVELOPE INTERNALDATE RFC822.SIZE)
* 1 FETCH (ENVELOPE ....)
B20 OK FETCH completed.
B21 FETCH 1 (BODYSTRUCTURE)
* 1 FETCH (BODYSTRUCTURE ...
B21 OK FETCH completed.

我有两个问题:

  1. 是否可以检查 IMAP 服务器是否支持使用 UTF-8 字符集进行搜索(例如通过功能)?
  2. 如果前者不可能(不抛出异常),我如何阻止 JavaMail 获取所有电子邮件?

我认为没有办法完成#1,但对于#2,请尝试将 mail.imap.throwsearchexception 属性 设置为 true。

并向 Microsoft 提交错误,因为 Office 365 确实应该支持使用 utf-8 进行搜索。