6

受信トレイ フォルダからメッセージを削除しようとしても問題ありませんが、すべてのメール フォルダに切り替えたときに削除が機能しません。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])
4

4 に答える 4

15

指定された Gmail ラベルのすべてのメールを Gmail のゴミ箱に移動します。

#!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

キャッシュがあるため、Gmail インターフェイスを更新することを忘れないでください

于 2012-04-19T14:05:47.420 に答える
8

gmail ブログ サイトで述べられているように、Google の IMAP の実装は少し異なります。より一般的なセマンティクスを取得するための指示に従うと、役に立ちますか?

また、Gmail の IMAP を従来の IMAP プロバイダーのように機能させたい場合には、さらにわかりにくいオプションもいくつかあります。メッセージが IMAP で表示されなくなったときに、メッセージの自動消去またはゴミ箱をオフにすることができます。

IMAP プロトコルを使用すると、メッセージに削除のマークを付けることができます。これは、メッセージがまだフォルダーに存在しているが、次回フォルダーが消去されたときに削除される予定である、一種の未解決状態です。標準の IMAP 実装では、メッセージを削除済みとしてマークすると、Gmail はメッセージをその状態にとどまらせず、すぐにフォルダから削除 (または自動消去) します。2 段階の削除プロセスが必要な場合は、このラボを有効にした後、[設定] の [転送と POP/IMAP] タブで [メッセージを自動的に消去しない] を選択します。

同様に、ほとんどの IMAP システムは、メッセージをアーカイブするという Gmail の概念を共有していません ([Gmail]/Trash ではなく、[Gmail]/All Mail フォルダにメッセージを送信します)。他の表示可能な IMAP フォルダーに残っていない削除済みメッセージを代わりに [Gmail]/Trash に送信したい場合は、高度な IMAP コントロールを使用してこのように設定できます。[転送と POP/IMAP] タブの [IMAP アクセス:] セクションで、[最後に表示された IMAP フォルダからメッセージが削除された場合:] オプションを見つけます。[メッセージを Gmail のゴミ箱に移動する] を選択します。さらに一歩進めたい場合は、「メッセージをただちに完全に削除する」を選択できます。

于 2010-10-21T16:05:55.783 に答える
6

Gmail の高度な IMAP コントロールを使用すると、IMAP 経由でメッセージを削除したときのメッセージの処理を設定できます。

Gmail Labs で「Advanced IMAP Controls」を有効にするだけです。設定ページは次のようになります。

設定

次に、メッセージを削除済みとしてマークし、この回答に従って消去すると、選択した設定に応じて、ゴミ箱に移動されるか、完全に削除されるか、「すべてのメール」にアーカイブされます。

于 2011-03-20T01:38:14.193 に答える