Python 3:通过 uid (imaplib) 将电子邮件移至垃圾箱

Posted

技术标签:

【中文标题】Python 3:通过 uid (imaplib) 将电子邮件移至垃圾箱【英文标题】:Python 3: Move email to trash by uid (imaplib) 【发布时间】:2018-03-20 10:41:44 【问题描述】:

我想将一封电子邮件从我的收件箱移到垃圾箱文件夹,我不想永久删除该电子邮件,我希望它在垃圾箱中等待 30 天才能被永久删除。

1.登录:

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login("example@gmail.com", "example")

2.得到我收件箱中的uid列表:

mail.select("inbox")
result, data = mail.uid('search', None, "ALL")
uidList = data[0].split()

3.处理了这些邮件:

#processEmails returns the uids of the emails that I need
#not really important for the purposes of this question

newUidList = processEmails(uidList)

4.删除newUidList中的邮件

for uid in newUidList:
    mail.uid('STORE',uid, '+FLAGS', '(\\Deleted)')

我认为这条线mail.uid('STORE',uid, '+FLAGS', '(\\Deleted)') 可以解决问题(因为这是我在互联网上找到的)。但是在这里问这个问题,您可能已经正确猜到它没有。

发生了什么?

当我执行此脚本时,电子邮件按计划从收件箱中消失了。但是当我访问垃圾文件夹时,那里什么都没有。所以我想也许他们被永久删除了。

但他们不是。当我看到我的电子邮件存储空间正在快速填满时,我注意到了这一点,这意味着我的电子邮件还在那里。

我进入“所有电子邮件”文件夹,它们就在那里。

所以我的问题是……

    如何获得我想要的结果?这将通过其 UID 将电子邮件移动到垃圾文件夹。 为什么它没有像我想象的那样做?我要求对此行进行解释mail.uid('STORE',uid, '+FLAGS', '(\\Deleted)')

最重要的是……

感谢您的意见:)

【问题讨论】:

您应该将电子邮件移至IMAP/Trash 而不是\\Deleted IIRC。可能只是Trash @Torxed 我尝试了你的建议:mail.uid('STORE', uid, '+FLAGS', '(IMAP/Trash)')mail.uid('STORE',b'249', '+FLAGS', '(Trash)')。也没有括号:mail.uid('STORE', uid, '+FLAGS', 'IMAP/Trash')mail.uid('STORE',b'249', '+FLAGS', 'Trash')。他们甚至没有从收件箱中取出电子邮件。 试试[Gmail]/Trash。如果这不起作用,我将把自己从这个问题中解脱出来。很久没有使用 IMAP 语法了,而且他们确实在十年间改变了它:P @Torxed 不幸的是,它没有用。无论如何谢谢:) 【参考方案1】:

我找到了答案!

因此,对于遇到相同问题的任何人,我发现了如何通过 uid 将您的电子邮件移至垃圾箱。回到我的帖子,我应该把mail.uid('STORE', uid, '+X-GM-LABELS', '\\Trash')而不是mail.uid('STORE',uid, '+FLAGS', '(\\Deleted)')

你有它:)

【讨论】:

所以我是对的,是Trash 而不是Deleted @Torxed 您对Trash 部分的看法是正确的。但是您忘记的部分是 '+X-GM-LABELS' 而不是 '+FLAGS' 啊酷,是的,如前所述。很久没搞这个了。很高兴它有效!不要忘记将您自己的答案标记为解决方案,以便其他人可以看到有什么帮助:D @Torxed 会在 24 小时后立即执行,这样我就可以将自己的答案标记为“已接受” 我可以使用相同的功能将电子邮件移动到 Tash 以外的其他文件夹吗?

以上是关于Python 3:通过 uid (imaplib) 将电子邮件移至垃圾箱的主要内容,如果未能解决你的问题,请参考以下文章

python和imaplib:如何在给定电子邮件ID的情况下下载附件文件

imaplib/gmail 如何在不标记为已读的情况下下载完整消息(所有部分)[重复]

Python 的 imaplib 是不是允许您设置超时?

在多个进程中使用imaplib.IMAP4_SSL

IMAP 命令 UID FETCH:参数太长

使用 python imaplib 从 Gmail 中“删除”一封电子邮件?