【发布时间】:2012-01-09 12:07:51
【问题描述】:
我目前正在尝试使用 JavaMail 从 IMAP 服务器(Gmail 和其他服务器)获取电子邮件。基本上,我的代码有效:我确实可以获得标题、正文内容等。我的问题如下:在 IMAP 服务器(无 SSL)上工作时,处理一条消息基本上需要 1-2 毫秒。当我使用 IMAPS 服务器(因此使用 SSL,例如 Gmail)时,我达到大约 250m/条消息。我只测量处理消息的时间(不考虑连接、握手等)。
我知道因为这是 SSL,所以数据是加密的。不过,解密的时间应该没那么重要吧?
我尝试设置更高的 ServerCacheSize 值、更高的 connectionpoolsize,但我的想法严重不足。有人遇到过这个问题吗?希望解决它?
我担心 JavaMail API 每次从 IMAPS 服务器获取邮件时使用不同的连接(涉及握手的开销......)。如果是这样,有没有办法覆盖这种行为?
这是我从 Main() 类调用的代码(虽然很标准):
public static int connectTest(String SSL, String user, String pwd, String host) throws IOException,
ProtocolException,
GeneralSecurityException {
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", SSL);
props.setProperty("mail.imaps.ssl.trust", host);
props.setProperty("mail.imaps.connectionpoolsize", "10");
try {
Session session = Session.getDefaultInstance(props, null);
// session.setDebug(true);
Store store = session.getStore(SSL);
store.connect(host, user, pwd);
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
int numMess = inbox.getMessageCount();
Message[] messages = inbox.getMessages();
for (Message m : messages) {
m.getAllHeaders();
m.getContent();
}
inbox.close(false);
store.close();
return numMess;
} catch (MessagingException e) {
e.printStackTrace();
System.exit(2);
}
return 0;
}
提前致谢。
【问题讨论】:
-
注意:字符串 SSL 是“imap”或“imaps”。另外,我已经阅读了stackoverflow.com/questions/2538481/javamail-performance 的问题,但在不是 Gmail 的 IMAPS 服务器上进行了尝试,并且仍然得到相同的结果。
-
同一 IMAP/IMAPS 服务器上的其他客户端(Thunderbird、Outlook、what-have-you)是否也会发生这种情况?在这种情况下,这不是你的代码的错,而是服务器的问题。
-
如何测量 Thunderbird 导入消息所需的时间? (我们在ms区...)。它在 20 秒内对所有文件夹收费(但我不知道它是否只获得了一些信息,当我点击消息时获得其余信息)。
-
嗯,这是有点麻烦,是的。我相信它有某种操作日志(默认关闭),但分辨率最多以秒为单位。您可以配置 TB 下载完整的邮件(默认只获取邮件头),然后测量整个收件箱;这至少应该告诉你它需要
-
你的底层操作系统是什么?
标签: java ssl imap jakarta-mail