1

Java、Python などから IMAP にアクセスするためのライブラリが多数あることを認識しています。

簡単な部分:

  • 指定された IMAP サーバー、ログイン、および特定のフォルダー名
  • そのフォルダー内のすべてのメッセージを削除します (または、その方が簡単または効率的である場合は、フォルダーを削除しますか?)

非典型的な部分:

  • N 個の削除ごとに抹消を行う
  • サーバーがビジー状態になるように、いくつかの再試行とバッチ サイズのロジックを含めます。セッションごとに 100 件のメッセージを削除して消去するだけでも役に立ちます。
  • すべてのヘッダーをダウンロードしないでください。

その最後の点が問題です。私が試したすべての電子メール クライアントは、20,000 件の電子メール ヘッダーのダウンロードを停止します。これを見る必要はありません。

POP3 スクリプトを使用して、1、2、3 の連続した ID を指定しました ...

しかし、私が見たすべての IMAP の例は、ヘッダーから取得したフィールドを使用しているようです。IMAP メッセージを削除するには、推測できない ID が必要なのではないでしょうか? (そして、クエリを実行することによってのみ取得できますか?)

ヘッダーを取得する必要がある場合、少なくともこれをできるだけコンパクトにすることはできますか? それとも、一度に 100 個だけやらせてくれますか?

または、メール クライアントの UI を使用してフォルダー全体を削除しようとしましたが、うまくいかないようです。最初にすべてのヘッダーをゴミ箱に移動しようとしていると思いますが、それで失敗するため、消去部分に到達することはありません。したがって、フォルダーの削除が実際にその内容を削除するよりも効率的かどうかはわかりません。

どんな考えでも大歓迎です。私は通常、Java または Python で作業しますが、柔軟性があります。これはライブラリの問題ではなく、プロトコルの問題だと思います。

4

2 に答える 2

2

非典型的なサーバー (非常に非典型的な gmail など) を使用していないと仮定すると、ログイン後に次のコマンドを実行し、[フォルダー] を選択できます。

A001 STORE 1:N +FLAGS (\Deleted)
A002 EXPUNGE
A003 STORE 1:N +FLAGS (\Deleted)
A004 EXPUNGE

など、N をバッチ サイズに置き換えます。これはごみ箱フォルダーを使用しません (IMAP サーバーに Gmail のような特別なロジックがない限り: gmail の場合は、IMAP アクセス設定を微調整してください)。

これを行うことができるはずです:

A001 STORE 1:* +FLAGS (\Deleted)
A002 EXPUNGE

ただし、しばらく時間がかかる場合があります。

実際、socatのようなツールを使用して、自分でログインしてプロトコルを話すことができます。

socat READLINE: OPENSSL:[server]:993,noverify,crlf
a LOGIN [user] "[password]"
b SELECT [folder]

そして、上記のストアおよび消去コマンド。

于 2012-07-30T19:33:59.280 に答える
0

IMAP 仕様は、メールボックス全体を破棄できるDELETEコマンドを提供します。

于 2012-03-27T23:39:33.833 に答える