【问题标题】:Deleting the most recently received email via Python script?通过 Python 脚本删除最近收到的电子邮件?
【发布时间】:2011-01-16 15:33:39
【问题描述】:

我使用 Gmail 和一个应用程序,如果我收到一封新电子邮件,它会通知我,并在工具提示中包含其标题。 (GmailNotifier with Miranda-IM)我收到的大多数电子邮件都是我不想阅读的,而且为了删除上述电子邮件而不得不以慢速连接登录 Gmail 很烦人。我相信插件是闭源的。

我一直(未成功)尝试编写一个脚本,该脚本将登录并删除“顶部”电子邮件(最近收到的电子邮件)。然而,这并不像我想象的那么容易。

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

poplib 也是最小的,但似乎有我需要的东西。但是 pop3 似乎并没有按照我熟悉的任何顺序对消息进行排序。如果我想查看收到的日期,我必须在每封电子邮件上调用 top() 或 retr() 来阅读标题。

我可能会遍历每一个邮件标题,搜索最近的日期,但这很难看。如果可能,我想避免解析我的整个邮箱。我也不想“弹出”邮箱并下载任何其他邮件。

现在已经 6 个小时了,我感觉没有比开始时更接近解决方案了。我忽略了一些简单的事情吗?我可以尝试另一个库吗? (我找到了一个“chilkat”,但它已经膨胀到了地狱,我希望用标准库来做到这一点)

【问题讨论】:

    标签: python email imap pop3


    【解决方案1】:
    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)对此进行了测试,它似乎工作正常。我会先给自己发几封假邮件来测试一下。

    注意事项:

    希望这会有所帮助,应该足以让您继续前进!

    【讨论】:

    • 这实际上与我所拥有的相同。但由于某种原因,Gmail 没有按时间顺序显示我的邮件。就我而言,numMessages 确实给出了 Gmails 中的最后一封电子邮件,看似无序列表,但它是一年多前的随机邮件,我非常感谢您的帮助。也许问题出在 Gmail 上?
    • 添加一些原始调试代码后,我检查了每条消息的标头时间戳。我的 Gmail pop 帐户自 2007 年以来显然没有收到任何邮件。我不知道 Google 如何实施他们的 pop3 系统,但它似乎被窃听了。我的 pop3 帐户中的电子邮件与 Web 界面之间没有关联。就好像 pop3 帐户包含其中的一半,而 web 包含另一半。
    • 嗨,Gary,尝试在上面的 mailserver.user() 行中添加用“recent:username”替换您的用户名。还要确保您的 Gmail 帐户在配置设置中设置为允许 POP3。我确实明白您对“随机”消息编号的意思,但如果您阅读此处 (mail.google.com/support/bin/answer.py?answer=47948),您会发现您需要使用“最近模式”以便所有消息都可用。我想如果你不使用最近模式,它可能会返回最近的未读消息?这只是一种预感。
    • 无论如何,使用上面的代码我能够从我的 Gmail 帐户中删除最近的邮件。
    • 刚刚使用它来删除阻止 Opera 访问 POP 帐户中的消息的消息。对我来说,用户调用中的“最近”不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2014-05-01
    • 2021-11-02
    相关资源
    最近更新 更多