如何使用imaplib和Gmail将电子邮件从所有邮件移动到垃圾箱

4
我希望使用imaplib和gmail删除收件箱中的一封电子邮件。但问题在于,该电子邮件被移动到“所有邮件”文件夹,而我希望将其发送到垃圾箱/回收站文件夹。
示例代码:
#!/usr/bin/env python

import imaplib

imap_host = 'imap.gmail.com'
imap_user = 'myemail@gmail.com'
imap_pass = 'mypass'

imap = imaplib.IMAP4_SSL(imap_host)

imap.login(imap_user, imap_pass)

status, data = imap.select('INBOX')

status, mail_id = imap.search(None, '(SUBJECT "My subject")')

status, msg_header = imap.fetch(mail_id[0], '(BODY[TEXT])')
saveFile = open('sample.txt',  'w')
saveFile.write(str(msg_header))
saveFile.close()

print "Received email body!"

# Delete the email
print "Deleting the email..."
imap.store(mail_id[0], '+FLAGS', '\\Deleted')
imap.expunge()
print "Email deleted!"

我想将电子邮件正文保存到一个新文件中,然后删除该电子邮件(此电子邮件地址上只会有一封电子邮件)。


1
您需要识别垃圾文件夹的名称,然后将邮件移动到那里。我相信有一个imap_move()函数。 - Max
2个回答

1

Gmail不允许直接从收件箱中删除电子邮件。

他们在这里提到了完整的电子邮件删除行为https://support.google.com/mail/answer/78755?hl=zh-cn

在 Gmail IMAP 中,仅适用于垃圾邮件和垃圾邮件的带删除标志的存储工作。

imap.store(mail_id [0],'+FLAGS','\ Deleted')

看起来他们是有意为避免从收件箱和自定义文件夹中意外删除而这样做的。

如果您想从收件箱或自定义文件夹中删除电子邮件,则需要将Trash标签应用于电子邮件,如下所示:

. STORE 1 +X-GM-LABELS (\ Trash)


这个答案与您提供的支持文档中Google所说的相矛盾。发送UID STORE ... +FLAGS \Deleted是完全可以的。尽管如此,文档也指出即使这样做,该邮件仍将保留在“所有邮件”虚拟文件夹中。 - Jan Kundrát
我认为在AllMail中,"UID STORE ... +FLAGS \Deleted"命令对邮件无效。尽管"uid store"操作是成功的,但实际上Gmail不会为AllMail邮件附加"\Deleted"标志。 - Subbi Reddy K

0

我知道这是一个老话题,但我也遇到了同样的问题,这里是我的解决方案,将Gmail中所有收件箱中的邮件移动到垃圾箱中

connection = imaplib.IMAP4_SSL('imap.gmail.com')
connection.login("xxxxx@gmail.com", "password")
connection.select(mailbox='"INBOX"', readonly=False)
connection.store("1:*", '+X-GM-LABELS', '\\Trash')
connection.close()  # close and logout the connection
connection.logout()

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