IMAP“Over Quota”特定脚本

时间:2012-03-27 23:29:06

标签: java python protocols imap quota

我意识到有许多库可以从Java,Python等访问IMAP。但我想要做的是非常具体的,并且与大多数imap示例相反。

简单的部分:

  • 给定IMAP服务器,登录和特定文件夹名称
  • 核实该文件夹中的所有邮件(或者,如果更容易或更有效,请点击文件夹?)

非典型部分:

  • 每N次删除后删除
  • 包含一些重试和批量大小逻辑,以便繁忙的服务器 - 甚至每个会话删除和删除100条消息都是一种帮助。
  • 请勿下载所有标题!

最后一点是个问题。我尝试过的每个电子邮件客户端都下载了20,000个电子邮件标题 - 我不需要这样看。

使用POP3脚本我刚刚给出了顺序ID,1,2,3 ......

但我见过的每个IMAP示例似乎都使用了从标题中获取的某些字段。那么也许删除IMAP消息需要一个你无法猜到的ID? (并且只能通过查询来获得?)

如果我确实需要获取标题,这至少可以做到尽可能紧凑吗?或者让我一次只做100个?

或者,我试图通过电子邮件客户端UI删除整个文件夹,但这似乎不起作用。我认为它试图首先将所有标题移动到垃圾箱,然后失败,所以永远不会进入清除部分。所以我不确定删除文件夹实际上比删除其内容更有效。

任何想法都赞赏。我通常使用Java或Python,但我很灵活。我认为这是一个协议问题,而不是库问题。

2 个答案:

答案 0 :(得分:2)

假设你没有使用非典型服务器(比如非常典型的gmail),你可以在LOGIN和SELECT [文件夹]之后执行这些命令:

A001 STORE 1:N +FLAGS (\Deleted)
A002 EXPUNGE
A003 STORE 1:N +FLAGS (\Deleted)
A004 EXPUNGE

依此类推,用批量大小替换N.这不会使用垃圾文件夹(除非您的IMAP服务器具有特殊逻辑,例如Gmail:for gmail,调整您的IMAP访问设置)。

你应该可以这样做:

A001 STORE 1:* +FLAGS (\Deleted)
A002 EXPUNGE

这可能需要一段时间。

事实上,您可以使用socat之类的工具登录并自行说出协议:

socat READLINE: OPENSSL:[server]:993,noverify,crlf
a LOGIN [user] "[password]"
b SELECT [folder]

然后从上面存储和删除命令。

答案 1 :(得分:0)

IMAP specification提供DELETE command,可以销毁整个邮箱。