1

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

简单的部分:

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

非典型部分:

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

最后一点是个问题。我尝试过的每个电子邮件客户端都在下载 20,000 个电子邮件标头时感到窒息——我不需要看到这些。

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

但是我看到的每个 IMAP 示例似乎都使用了从标题中获取的某些字段。所以也许删除 IMAP 消息需要一个你猜不到的 ID?(只能通过查询获得?)

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

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

任何想法表示赞赏。我通常使用 Java 或 Python 工作,但我很灵活。我认为这是一个协议问题,而不是图书馆问题。

4

2 回答 2

2

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

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

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

你应该能够做到这一点:

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

不过这可能需要一段时间。

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

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

然后是上面的 store 和 expunge 命令。

于 2012-07-30T19:33:59.280 回答
0

IMAP 规范提供了一个可以销毁整个邮箱的DELETE命令。

于 2012-03-27T23:39:33.833 回答