2015-02-23 90 views
0

我想使用imaplib和gmail从我的收件箱中删除电子邮件。问题是电子邮件从收件箱移动到所有邮件文件夹,但我希望它发送到垃圾箱/斌文件夹。如何使用imaplib和gmail将所有邮件中的电子邮件移动到垃圾箱

示例代码:

#!/usr/bin/env python 

import imaplib 

imap_host = 'imap.gmail.com' 
imap_user = '[email protected]' 
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 2015-02-23 15:03:12

回答

0

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

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

在Gmail的IMAP存储与删除标志仅适用于垃圾邮件和垃圾邮件。

imap.store(mail_id [0], '+ FLAGS', '\' 中删除)

似乎他们把它有意用于避免从收件箱和自定义文件夹意外删除。

如果你想从收件箱或自定义文件夹删除电子邮件则需要邮件标签应用到电子邮件这样

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

+0

这个答案与谷歌在你链接到的支持文档中说的相矛盾。发送'UID STORE ... + FLAGS \ Deleted'完全可以。尽管如此,该文档表示该消息将保留在“所有消息”虚拟文件夹中。 – 2015-03-02 12:04:26

+0

我认为“UID STORE ... + FLAGS \已删除”不适用于AllMail的电子邮件。尽管“uid store”操作已成功,但实际上Gmail不会为AllMail电子邮件追加“\ Deleted”标志。 – 2015-03-03 17:52:08

相关问题