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

6

我想把收件箱中的一封电子邮件移到垃圾文件夹,但我不希望该电子邮件被永久删除,我希望它在垃圾箱中等待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)') 可以解决问题(因为我在网络上找到了这个答案)。但是,既然你来问这个问题,你可能已经猜到它并没有解决。
问题出现在哪里呢?
当我执行这个脚本时,邮件从收件箱中消失了,就像计划的那样。但是当我查看垃圾邮件文件夹时,什么也没有。所以我想也许它们被永久删除了。
但它们没有被删除。当我发现我的电子邮件存储空间快要满了时,我注意到了这一点,这意味着我的电子邮件还在某个地方。
我进入“所有电子邮件”文件夹,然后在那里找到了它们。
我的问题是:
1.我该如何得到我想要的结果?即按其UID将电子邮件移至垃圾邮件文件夹。
2.为什么它没有做我想它做的事情?我想要一个关于这一行 mail.uid('STORE',uid, '+FLAGS', '(\\Deleted)') 的解释。
最重要的是:
感谢您的帮助 :)

1
据我所知,你应该将电子邮件移动到 IMAP/Trash 而不是 \\Deleted。可能只是 Trash - Torxed
1
@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')。它们甚至不能将电子邮件从收件箱中取出。 - 0_jump
尝试使用[Gmail]/Trash。如果不起作用,我将退出这个问题。很久没有使用IMAP语法了,而且它们也在不断变化:P - Torxed
@Torxed很遗憾,它没有起作用。无论如何,还是谢谢您 :) - 0_jump
1个回答

7

我找到答案了!

对于有着相同问题的人,我发现如何通过uid将你的邮件移至垃圾箱。回顾我的帖子,我应该使用mail.uid('STORE', uid, '+X-GM-LABELS', '\\Trash')而不是mail.uid('STORE',uid, '+FLAGS', '(\\Deleted)')

就是这样 :)


1
所以我是对的,它是“垃圾”,而不是“删除”? - Torxed
2
@Torxed,你关于“Trash”部分是正确的。但你忘记了“+X-GM-LABELS”而不是“+FLAGS”的部分。 - 0_jump
啊,不错哦,就像之前说的那样。很久没有折腾这个东西了,真开心它能正常工作!别忘了将自己的回答标记为解决方案,以便其他人看到有帮助 :D - Torxed
1
@Torxed 一旦24小时过去,我就能标记自己的答案为“已接受”,届时会执行。 - 0_jump
我可以使用相同的函数将电子邮件移动到除了垃圾箱以外的其他文件夹吗? - Alani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接