IMAP“超过配额”特定脚本

2024-09-28 01:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有很多库可以访问IMAP,比如Java、Python等等,但是我想做的是非常具体的,与大多数IMAP示例相反。在

最简单的部分:

  • 给定IMAP服务器、登录名和特定文件夹名
  • 对该文件夹中的所有邮件进行核武处理(或者对该文件夹进行核武处理,如果这样更简单或更有效的话?)在

非典型部分:

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

最后一点是个问题。我试过的每一个电子邮件客户端都会因为下载20000个邮件头而感到窒息-我不需要看到这些邮件头。在

对于POP3脚本,我只给出了顺序id,1,2,3。。。在

但我看到的每个IMAP示例似乎都使用了从头文件中获取的字段。所以,删除IMAP邮件可能需要一个你猜不到的ID?(只能通过查询来获取?)在

如果我真的需要得到标题,这至少可以做得尽可能紧凑吗?还是让我一次只做100次?在

或者,我试图通过电子邮件客户端用户界面删除整个文件夹,但这似乎不起作用。我想它是想先把所有的标题移到垃圾箱,但没有成功,所以永远都不能到达删除部分。所以我不确定删除文件夹是否比删除其内容更有效。在

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


Tags: 服务器文件夹消息客户端标题示例电子邮件邮件
2条回答

假设您没有使用非典型服务器(比如gmail,它非常不典型),您可以在登录后执行以下命令,然后选择[文件夹]:

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

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

您应该能够这样做:

^{pr2}$

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

事实上,您可以使用socat这样的工具登录并自己讲协议:

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

然后从上面执行store和expunge命令。在

IMAP specification提供了一个可以销毁整个邮箱的^{} command。在

相关问题 更多 >

    热门问题