使用imaplib删除gmail中的电子邮件时出现问题

Mic*_*yak 5 python gmail imap imaplib gmail-imap

我尝试从收件箱文件夹中删除邮件,一切正常,但当我切换到所有邮件文件夹时删除不起作用.expunge()方法返回('OK', [None])并且未删除消息:

>>>import imaplib
>>>server = imaplib.IMAP4_SSL('imap.gmail.com','993')
>>>server.login('likvidator89@gmail.com','Password')
>>>server.select('inbox')
>>>for i in server.search(None,'all')[1][0].split():
...    print i+"\n"+server.fetch(i,'(BODY[HEADER.FIELDS (Subject)])')[1][0][1]
...
#  that how i know what UID hame my message? I select by subject
#....
#28
#Subject: 1 Question Has 1 Answer - Stack Overflow
#
#
#29
#Subject: 2222222222
#...
>>>server.store(29,'+FLAGS','\\Deleted')
#('OK', ['29 (FLAGS (\\Seen \\Deleted))'])
>>>server.expunge()
#('OK', ['29'])
>>> server.select('[Gmail]/All Mail')
('OK', ['47'])
>>> for i in server.search(None,'all')[1][0].split():
...  print i+"\n"+server.fetch(i,'(BODY[HEADER.FIELDS (Subject)])')[1][0][1]
... 
#....
#
#46
#Subject: 2222222222
#
#
#47
#Subject: 3333333333333333
#
#....
>>> server.store(47,'+FLAGS','\\Deleted')
('OK', ['47 (FLAGS (\\Seen \\Deleted))'])
>>> server.expunge()
('OK', [None])
Run Code Online (Sandbox Code Playgroud)

小智 12

它将给定gmail标签中的所有邮件移动到gmail Trash

#!usr/bin/python
import email, imaplib

user = 'xxx'
pwd = 'xxx'

m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,pwd)

m.select("some_gmail_label")
m.store("1:*",'+X-GM-LABELS', '\\Trash')

m.expunge() # should be useless, but gmail server says it is ok
Run Code Online (Sandbox Code Playgroud)

请记住刷新g​​mail界面,因为它有缓存


hug*_*own 8

正如它在gmail博客网站上所说,谷歌的IMAP实现有点不同.当您按照说明获取更常用的语义时,它有帮助吗?

对于那些希望让Gmail的IMAP工作更像传统IMAP提供商的人来说,还有一些更加模糊的选项:当通过IMAP不再可见时,您可以关闭自动清除或废弃邮件.

IMAP协议允许将消息标记为删除,这是一种不明确状态,其中消息仍然存在于文件夹中,但是下次在文件夹被清除时将被删除.在我们的标准IMAP实施中,当您将邮件标记为已删除时,Gmail不会让其在该状态下逗留 - 它会立即从文件夹中删除(或自动删除)该邮件.如果您需要两阶段删除过程,请在启用此实验室后,在"设置"中的"转发和POP/IMAP"标签下选择"不自动删除邮件".

同样,大多数IMAP系统都不会共享Gmail的归档消息概念(将消息发送到[Gmail]/All Mail文件夹而不是[Gmail]/Trash).如果您希望将未保留在任何其他可见IMAP文件夹中的已删除邮件发送到[Gmail] /已删除邮件,则可以使用高级IMAP控件以这种方式设置您的首选项.在"转发和POP/IMAP"标签的"IMAP访问:"部分中,找到"当从上一个可见的IMAP文件夹中删除邮件时:"选项.选择"将邮件移至Gmail回收站".如果您想更进一步,可以选择"立即删除邮件".


Aco*_*orn 6

使用Gmail高级IMAP控件,您可以设置在通过IMAP删除邮件时会发生什么.

只需在Gmail实验室中启用"高级IMAP控件"即可.设置页面如下所示:

设置

然后,当您将邮件标记为已删除并按照此答案进行清除时,它将被移至邮箱,永久删除或存档为"所有邮件",具体取决于您选择的设置.

  • 我知道这是一个非常古老的主题,但为了帮助其他任何有Rahul问题的人,你只需要在添加垃圾标签之前先删除"收件箱标签".即`imap.store(num,'-X-GM-LABELS','\\ Inbox')` (2认同)