2010-02-14 130 views
2

我使用Gmail和一个应用程序,如果我收到一封新邮件,并在工具提示中包含其标题,则会通知我。 (使用Miranda-IM的GmailNotifier)我收到的大部分电子邮件都是我不想阅读的电子邮件,而且很烦人不得不通过慢速连接登录Gmail,以便删除所述电子邮件。我相信插件是封闭的源代码。通过Python脚本删除最近收到的电子邮件?

我一直试图编写一个脚本来登录并删除'顶部'电子邮件(最近收到的电子邮件)。然而,这并不像我认为的那样容易。

我第一次尝试使用imaplib,但发现它不包含任何我希望它的方法。这有点像dbapi规范,只包含最小的功能,因为imap规格已更改。然后我尝试阅读imap RFC(rfc3501)。通过它的一半,我意识到我不想写一个完整的邮件客户端,所以决定尝试使用pop3。

poplib也很小,但看起来有我所需要的。然而,pop3似乎没有以我熟悉的任何顺序对消息进行排序。如果我想查看收到的日期,我必须在每封电子邮件中调用top()或retr()来阅读标题。

我大概可以遍历每一个消息头,搜索最近的日期,但这很丑。如果可能,我想避免解析我的整个邮箱。我也不想'弹出'邮箱并下载任何其他消息。

现在已经6个小时了,我觉得没有比开始时更接近解决方案。我可以忽略简单的事情吗?有我可以尝试的另一个图书馆吗? (我找到了“奇尔卡特”之一,但它的臃肿到地狱,我希望用标准库做到这一点)

回答

2
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),它似乎正常工作。我会给自己发一些虚拟电子邮件来首先测试它。

注意事项:

希望这有帮助,它应该足以让你走!

+0

这实际上与我的相同。但由于某些原因,Gmail不会按照时间顺序显示我的消息。 在我的情况下,numMessages确实给Gmail的最后一封电子邮件看似无序列表,但它是从一年前的随机一个 我真的很感谢帮助。 Gmail的问题可能存在? – 2010-02-14 06:59:11

+0

添加了一些原始调试代码后,我检查了每条消息的标题时间戳。 自从2007年以来,我的Gmail pop账户显然还没有收到任何邮件。 我不知道Google如何实现他们的pop3系统,但它似乎被窃听。我的pop3帐户中的电子邮件与网络界面之间没有关联。 就好像pop3帐户包含了其中的一半,而网页包含了另一半。 – 2010-02-14 07:12:25

+0

嗨加里, 尝试在上面的mailserver.user()行中添加用“recent:username”替换您的用户名。另外请确保您的Gmail帐户已设置为允许在配置设置中使用POP3。 我明白了您对'随机'邮件编号的含义,但如果您在此处阅读(http://mail.google.com/support/bin/answer.py?answer=47948),您会看到您需要使用“最近模式”,以便所有消息都可用。 我想如果你不使用最近的模式,它可能是返回最近的未读消息?这只是一种预感。 – swanson 2010-02-14 07:24:41

相关问题