我已经在使用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.
我确实有两个问题:
答案 0 :(得分:0)
我认为没有办法做#1,但是对于#2,请尝试将mail.imap.throwsearchexception
属性设置为true。
并向Microsoft提交错误,因为Office 365实际上应该支持使用utf-8搜索。