【问题标题】:Permanently delete Gmail email using Python imaplib使用 Python imaplib 永久删除 Gmail 电子邮件
【发布时间】:2019-08-26 08:44:49
【问题描述】:

我正在使用 Gmail 规则将某些电子邮件标记为“删除”以标记为永久删除。使用这个 python 脚本,我可以成功地将它们移动到 Gmail Bin,但是一旦它们在那里,我就无法永久删除它们。

有什么想法吗?我已经尝试在 Gmail imap 设置中设置自动删除,但没有改变任何东西。

mail = imaplib.IMAP4_SSL('imap.gmail.com', 993)

try:
    rv, data = mail.login(EMAIL_ACCOUNT, EMAIL_PASS)
except imaplib.IMAP4.error as e:
    print "LOGIN FAILED!!! "
    print e
    sys.exit(1)

print rv, data

mail.select("delete")
type, data = mail.search(None, 'ALL')

mail.store("1:*",'+X-GM-LABELS', '\\Trash')
mail.store("1:*", "+FLAGS", '\\Deleted')
mail.expunge()

【问题讨论】:

  • 如果不将它们移动到垃圾箱/垃圾箱,然后选择垃圾箱,再次找到邮件并再次发送删除标志,您就无法真正使用 gmail。如果您不先将其移至垃圾箱,则最终将删除文件夹标签并将其放入“所有邮件”中
  • 在 gmail 上默认情况下,邮件将在 30 天内从垃圾箱中过期,这对于某些用例来说可能已经足够了。
  • @Max 不是我在用 mail.store("1:*",'+X-GM-LABELS', '\\Trash') mail.store("1:*", "+FLAGS", '\\Deleted') 做的,将它移到 bin 并设置已删除标志吗?
  • 您在当前文件夹中的“副本”上设置了已删除标志,而不是垃圾箱副本。 (IMAP 文件夹的 Gmail 模拟不完善且复杂。)您需要 select("[Gmail]/Bin")(注意本地化),找到邮件,然后执行相同的 mail.store 命令,但 UID 在垃圾箱中。如果您要删除所有内容,这很简单。
  • @Max 非常感谢您的帮助。哇永远不会意识到“副本”。是的,gmails imap 实现需要带有警告标签!

标签: python python-2.7 gmail imap imaplib


【解决方案1】:

总结问题:

Gmail 模拟 IMAP 文件夹意味着带有多个标签的邮件在多个文件夹中显示为单独的副本。一些消息数据和元数据在文件夹之间共享,但其他元数据不共享。

在邮件上放置\Deleted 标志会从邮件中删除当前文件夹/标签。如果这是最后一个标签,则此邮件将被归档并位于 All Mail 文件夹中。

使用 IMAP 将邮件移动到垃圾箱或 Bin 文件夹(通过 MOVECOPY*1),或者添加垃圾箱标签对应于为其指定垃圾箱标签(并且应该自动删除所有其他标签)。然后它将坐在那里并在 30 天内被清除。

要永久删除已删除的邮件,您需要 select Bin 或 Trash 文件夹(其名称取决于区域设置,您可能需要 list 才能找到它),然后添加 \Deleted 标志,对应永久删除。

在您的示例中,您已将邮件移至垃圾箱,并从邮件中多余地删除了当前标签。您需要切换到回收站文件夹才能将其永久删除。

*1:如果您使用 UID MOVEUID COPYUIDPLUS 响应应返回垃圾文件夹中的新 UID,您可以使用该 UID 永久删除项目。

注意:Gmail 网络界面中的 IMAP 设置 UI 理论上具有自定义此行为的设置,但根据我的经验,更改它们并没有实际效果。

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 2017-01-04
    • 2010-12-19
    • 2011-03-02
    • 2011-04-28
    • 2012-12-11
    • 2011-04-01
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多