gpt4 book ai didi

gmail - 如何使用 IMAP 协议(protocol)从 Gmail 的电子邮件中删除标签?

转载 作者:行者123 更新时间:2023-12-01 06:33:44 24 4
gpt4 key购买 nike

在 Gmail 添加标签工作得很好:

imap.store(item, '+X-GM-LABELS', label)
imap.expunge()

但:
imap.store(item, '-X-GM-LABELS', label)
imap.expunge()

...应该删除标签将什么都不做,而不会返回错误('OK')。

去除标签的正确方法是什么?

最佳答案

多年后,但对于从谷歌登陆这里的任何人,我遇到了与 OP 类似(或相同)的问题。

TL;DR : 搜索 X-GM-LABELS而不是使用 imap.select(label)
删除标签的简洁方法(如 Changneng 所指出的)是:

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) 中删除标签将删除标签,并一次性从标签文件夹中删除邮件。

另外,请注意,如果您的标签中有空格,上述代码将失败,在这种情况下,它需要用引号括起来,例如替换 labelf'"{label}"' .

关于gmail - 如何使用 IMAP 协议(protocol)从 Gmail 的电子邮件中删除标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17263500/

24 4 0