4

Gmail では、ラベルの追加は問題なく機能します。

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

しかし:

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

...ラベルを削除するはずですが、エラー ('OK') を返さずに何もしません。

ラベルを削除する適切な方法は何ですか?

4

3 に答える 3

2

数年後、Google からここにたどり着いた人にとっては、OP と同様 (または同一) の問題に遭遇しました。

TL;DRX-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) からラベルを削除すると、ラベルが削除され、ラベルのフォルダーからメッセージが一度に削除されます。

また、ラベルにスペースが含まれている場合、上記のコードは失敗します。その場合は、引用符で囲む必要がありlabelますf'"{label}"'

于 2020-03-27T20:13:04.847 に答える
0

テスト済みのように、Gmail は次の構文をサポートしてラベルを削除します

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

消印は必要ありません。

于 2015-04-20T11:04:01.313 に答える
0

Gmail は、IMAP で見るとラベルが 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 に関してこのフォルダーからメッセージを削除するだけです。

于 2014-12-22T13:18:09.790 に答える