JavaMail SEARCH返回BADCHARSET

时间:2019-01-11 14:00:03

标签: javamail

我已经在使用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 个答案:

答案 0 :(得分:0)

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

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