在Gmail上添加标签效果很好:
imap.store(item, '+X-GM-LABELS', label)
imap.expunge()
可是:
imap.store(item, '-X-GM-LABELS', label)
imap.expunge()
...应该删除标签只会做什么,而不会返回错误('OK')。
删除标签的正确方法是什么?
答案 0 :(得分:1)
几年后,但是对于从Google登陆到这里的任何人,我都遇到了与OP类似(或相同)的问题。
TL; DR :通过X-GM-LABELS
而不是使用imap.select(label)
删除标签的简洁方法(如常能指出的那样)是:
imap.store(item, '-X-GM-LABELS', label)
但是,由于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
在这种情况下,无法使用-X-GM-LABELS
删除标签,因为标签实际上并没有附加到该文件夹中的副本上。相反,您必须查找收件箱(或可能是其他任何文件夹)中的电子邮件副本,并将其从该ID中删除。对于大多数目的和目的,此加载消息的方法应替代选择标签的文件夹:
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!
收件箱文件夹中的副本将附加所有自定义标签,并且从该ID(item
)删除该标签将删除该标签,并从该标签的文件夹中一次性删除邮件。
此外,请注意,如果您的标签中有空格,则上面的代码将失败,在这种情况下,它需要用引号引起来,例如将label
替换为f'"{label}"'
。
答案 1 :(得分:0)
当您通过IMAP查看时,Gmail会将其标签标记为IMAP文件夹:https://support.google.com/mail/answer/77657?hl=en
当您谈到Gmail IMAP扩展程序时,https://developers.google.com/gmail/imap_extensions#access_to_gmail_labels_x-gm-labels其文档称它可用于添加标签,存储和搜索。我想这是通过标准IMAP协议使用它的便捷方式,不在所有文件夹中搜索字母。 因此,如果您想要删除一些标签,只需从IMAP中删除此文件夹中的邮件。
答案 2 :(得分:0)
经测试,Gmail支持以下语法来删除标签
imap.store(item, '-X-GM-LABELS', label)
不需要删除声明。