使用 Python imaplib 永久删除 Gmail 电子邮件

Permanently delete Gmail email using Python imaplib

我正在使用 Gmail 规则将某些电子邮件标记为 'delete' 以标记为永久删除。使用此 python 脚本,我可以成功地将它们移动到 Gmail 垃圾箱,但一旦它们在那里就无法永久删除它们。

有什么想法吗?我试过在 Gmail imap 设置中设置自动删除 on/off 但没有任何改变。

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 对 IMAP 文件夹的模拟意味着带有许多标签的邮件在许多文件夹中显示为单独的副本。某些消息数据和元数据在文件夹之间共享,但其他元数据则不然。

在邮件上放置 \Deleted 标志将从邮件中删除当前的 folder/label。如果这是最后一个标签,则此邮件将存档并在 All Mail 文件夹中可用。

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

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

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

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

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