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

Python 如何使用imaplib和gmail将电子邮件从所有邮件移动到垃圾箱,python,gmail,imap,imaplib,Python,Gmail,Imap,Imaplib,我想用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.lo

我想用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!"

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

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

他们在这里提到了完整的电子邮件删除行为

在gmail中,带有删除标志的imap存储仅适用于垃圾和垃圾邮件

imap.store(邮件id[0]、“+标志”、“已删除”)

似乎他们是故意这样做的,以避免从收件箱和自定义文件夹中意外删除

如果您想从收件箱或自定义文件夹中删除电子邮件,您需要像下面这样对电子邮件应用垃圾标签


。存储1+X-GM-LABELS(\Trash)

您需要识别垃圾箱文件夹的名称,然后将邮件移动到那里。我相信有一个imap_move()函数。这个答案与您链接到的支持文档中谷歌的说法相矛盾。发送
UID存储是完全可以的+标志\已删除
。文档中说,即使在这之后,邮件仍将保留在“All messages”虚拟文件夹中。我认为“UID STORE…+FLAGS\Deleted”对来自AllMail的电子邮件不起作用。虽然“uid存储”操作成功,但实际上Gmail不会为所有邮件添加“\Deleted”标志。