如何使用IMAP协议从Gmail的电子邮件中删除标签?
在Gmail上添加标签效果很好:如何使用IMAP协议从Gmail的电子邮件中删除标签?,gmail,imap,gmail-imap,Gmail,Imap,Gmail Imap,在Gmail上添加标签效果很好: imap.store(item, '+X-GM-LABELS', label) imap.expunge() 但是: …它应该删除标签,但不会执行任何操作,不会返回错误(“确定”) 删除标签的正确方法是什么?当您通过IMAP查看标签时,Gmail会将其作为IMAP文件夹: 当你谈到Gmail IMAP扩展时,它的文档说它可以用于添加标签、存储和搜索。我想通过标准IMAP协议使用它是一种方便的方式,这样就不会在所有可能的文件夹中搜索信件。 因此,如果您想删除一些
imap.store(item, '+X-GM-LABELS', label)
imap.expunge()
但是:
…它应该删除标签,但不会执行任何操作,不会返回错误(“确定”)
删除标签的正确方法是什么?当您通过IMAP查看标签时,Gmail会将其作为IMAP文件夹: 当你谈到Gmail IMAP扩展时,它的文档说它可以用于添加标签、存储和搜索。我想通过标准IMAP协议使用它是一种方便的方式,这样就不会在所有可能的文件夹中搜索信件。
因此,如果您想删除一些标签,只需使用IMAP从该文件夹中删除邮件。经过测试,Gmail支持以下语法来删除标签
imap.store(item, '-X-GM-LABELS', label)
不需要删除声明。几年后,但对于从谷歌登陆这里的人来说,我遇到了与OP类似(或相同)的问题 TL;DR:按
X-GM-LABELS
搜索,而不是使用imap。选择(标签)
去除标签的简明方法(如长能所指出的)是: 但是,由于Gmail在某种程度上互换处理标签和文件夹,但不包括标签文件夹中邮件副本上的标签,因此如果您使用以下方法获取邮件,上述方法将不起作用:
imap.select(label)
ok, data = imap.search(None, "ALL")
...
imap.fetch(item, "(RFC822)")
imap.store(item, '-X-GM-LABELS', label) # <-- Effectively a no-op
收件箱文件夹中的副本将附加所有自定义标签,从该id(项
)中删除标签将删除标签,并一次性从标签文件夹中删除邮件
另外,请注意,如果标签中有空格,上述代码将失败,在这种情况下,需要用引号括起来,例如,将label
替换为f'{label}'
imap.store(item, '-X-GM-LABELS', label)
imap.select(label)
ok, data = imap.search(None, "ALL")
...
imap.fetch(item, "(RFC822)")
imap.store(item, '-X-GM-LABELS', label) # <-- Effectively a no-op
imap.select('inbox')
ok, data = imap.search(None, 'X-GM-LABELS', label)
...
imap.fetch(item, "RFC822")
imap.store(item, '-X-GM-LABELS', label) # <-- Will now remove the label!