我的行家是
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
我的代码如下
IMAPClient client = new IMAPClient();
client.connect("localhost");
for(50K users){
client.login(login + emailSuffix, password);
for (int i = 0; i < folders.length; i++) {
System.out.println(client.select("INOX"); //prints true, it's ok
}
}
如何使用 apache commons 客户端抓取消息?所有方法都返回 boolean 值或 void,所以看起来只是服务器检查库,对吗? 是否有可能以某种方式从 imapclient 获取有用的信息? 我的意思是未读消息的数量、某些术语的消息对象(内容+标题+sibject)等等。
附注Java Mail api 当然具有我需要的所有功能,但在 50K 循环中使用它非常慢(我在 other SO question 上描述的 Java Mail API 的工作。Commons 连接速度更快,但无法提供有用的信息(
最终通过简单地迭代文件系统解决了我的问题(我有 maildir 格式)。 我猜Java Mail API 会在 store.connect
中为每个用户创建新的 dovecot 身份验证,而它应该只连接一次(使用 dovecot 身份验证),然后为每个用户登录(使用 dovecot imap-login)。这就是为什么我每次迭代都等待 1 分钟 - 它在 dovecot 配置中的身份验证过程处于标准空闲状态。我不确定,但看起来是这样。
Apache lib 运行速度很快,但它只是用于 ping 服务器的测试库、检查连接和其他 imap 操作。它返回有关操作的 boolean 结果,但不返回有用的信息(
我是一名优秀的程序员,十分优秀!