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



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

有什么想法吗?我尝试在 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 模拟 IMAP 文件夹意味着具有许多标签的邮件会在多个文件夹中显示为单独的副本。 某些邮件数据和元数据在文件夹之间共享,但其他元数据则不共享。

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

使用 IMAP 将邮件移动到"废纸篓"或"废纸篓"文件夹(通过MOVECOPY*1),或添加"废纸篓"标签相当于为其提供"废纸篓"标签(并且应自动删除所有其他标签)。 然后它将坐在那里并在 30 天内被清除。

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

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

*1:如果使用UID MOVEUID COPY,则UIDPLUS响应应返回"废纸篓"文件夹中可用于永久删除项目的新 UID。

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

我遇到了同样的问题,所以这里有一个对我有用的完整代码.
希望它能帮助某人.
重要提示:您的电子邮件必须事先移至垃圾箱!

connection = imaplib.IMAP4_SSL('imap.gmail.com')
connection.login("xxxxx@gmail.com", "xxxxx@gmail.com's account app pwd")
connection.select(mailbox='"[Gmail]/Trash"', readonly=False)
connection.store("1:*", '+FLAGS', '\Deleted')
connection.expunge()
connection.close()  # close and logout the connection
connection.logout()

最新更新