通过Python脚本删除最近收到的邮件?

3 投票
1 回答
7618 浏览
提问于 2025-04-15 19:15

我在用Gmail,还有一个应用程序可以提醒我有没有新邮件,并在提示框里显示邮件标题。(GmailNotifier和Miranda-IM)我收到的大多数邮件其实我都不想看,每次都要在慢慢的网络上登录Gmail去删除这些邮件,真是让人烦。这个插件好像是封闭源代码的。

我一直在尝试写一个脚本,登录后删除最新收到的邮件(也就是最上面的那封)。不过,这比我想象的要复杂得多。

我最开始试着用imaplib,但发现它没有我希望的那些方法。它有点像数据库API的规范,只提供了最基本的功能,以防imap的规范发生变化。然后我试着读imap的RFC文档(rfc3501)。看了一半我就意识到,我并不想写一个完整的邮件客户端,所以决定试试pop3。

poplib也很简单,但看起来有我需要的功能。不过pop3似乎没有我熟悉的邮件排序方式。如果我想查看邮件的接收日期,我必须对每一封邮件都调用top()或retr()来读取邮件头。

我可能可以遍历每一封邮件的头部,寻找最新的日期,但这样做太麻烦了。如果可以的话,我想避免解析整个邮箱。我也不想“弹出”邮箱,下载其他邮件。

现在已经过去6个小时了,我觉得离解决问题还是远得很。我是不是忽略了什么简单的东西?有没有其他库可以试试?(我找到一个叫‘chilkat’的库,但它太臃肿了,我希望能用标准库来解决这个问题)

1 个回答

4
import poplib

#connect to server
mailserver = poplib.POP3_SSL('pop.gmail.com')
mailserver.user('recent:YOURUSERNAME') #use 'recent mode'
mailserver.pass_('YOURPASSWORD') #consider not storing in plaintext!

#newest email has the highest message number
numMessages = len(mailserver.list()[1])

#confirm this is the right one, can comment these out later
newestEmail = mailserver.retr(numMessages)
print newestEmail

#most servers will not delete until you quit
mailserver.dele(numMessages)
mailserver.quit()

我最近使用了poplib,写了一个非常简单的邮件客户端。我在我的邮件服务器上(不是gmail)测试了一些测试邮件,结果看起来工作正常。建议你先给自己发几封测试邮件,看看效果。

注意事项:

希望这些信息对你有帮助,这些应该足够让你开始使用了!

撰写回答