12

Gmail には、ラベル付きのメッセージがたくさんあります。

これらのメッセージを取得するために IMAP クライアントを使用したいのですが、検索の呪文が何であるかわかりません。

c = imaplib.IMAP4_SSL('imap.gmail.com')
c.list()
('OK', [..., '(\\HasNoChildren) "/" "GM"', ...])
c.search(???)

この種の例はあまり見つかりません。

4

5 に答える 5

11

imaplibは意図的に IMAP プロトコルの薄いラッパーであり、ユーザーの柔軟性を高め、IMAP 仕様の変更に適応する能力を高めることを想定しています。その結果、実際には検索クエリの構造が提供されず、IMAP 仕様に精通している必要があります。

「6.4.4. SEARCH コマンド」で説明したように、検索条件にはさまざまな項目を指定できます。SELECT何かを検索する前に、メールボックス (フォルダーの IMAP 名) を検索する必要があることに注意してください。(私が理解しているように、複数のフォルダーを同時に検索するには、複数の IMAP 接続が必要です。)IMAP4.listメールボックス識別子が何であるかを理解するのに役立ちます。

imaplib上記にリンクされている RFC の「9. Formal Syntax」も、渡す文字列を定式化するのに役立ちます。

r'(\HasNoChildren) "/"'、ルート メールボックスのメールボックス フラグ/です。「7.2.6. FLAGS レスポンス」を参照してください。

幸運を!

于 2009-01-07T19:37:42.950 に答える
9
import imaplib 
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select('**label name**') # <-- the label in which u want to search message
obj.search(None, 'FROM', '"LDJ"')
于 2010-06-23T11:45:49.147 に答える
5

Google によると、ラベルは IMAP フォルダとまったく同じようにアクセスされます。

于 2008-10-07T16:42:21.920 に答える
2

Gmail で imaplib を使用する最も簡単な方法は、 Gmail の Imap 拡張ページX-GM-RAWで説明されている属性を使用することです。

プロセスは次のようになります。

最初に、適切な電子メールとパスワードを使用してアカウントに接続します。

c = imaplib.IMAP4_SSL('imap.gmail.com', 993)
email = 'eggs@spam'
password = 'spamspamspam'
c.login(email, password)

次に、フォルダー/ラベルのいずれかに接続します。

c.select("INBOX")

必要に応じて、使用可能なすべてのフォルダー/ラベルを で一覧表示できますc.list()

最後に、検索方法を使用します。

gmail_search = "has:attachment eggs OR spam"
status, data = c.search(None, 'X-GM-RAW', gmail_search)

では、gmail の高度な検索gmail_searchで使用されるものと同じ検索構文を使用できます 。

検索コマンドは、コマンドのステータスと、gmail_search に一致するすべてのメッセージの ID を返します。

この後、次のように ID で各メッセージを取得できます。

for id in data[0].split():
    status, data = gmail.fetch(id, '(BODY[TEXT])')
于 2016-04-26T20:25:52.173 に答える
0

私は、imaplib が多くの応答解析を行っていないことにかなり驚いています。そして、応答は解析しにくいように細工されているようです。

FWIW、私自身の質問に答えるために: c.search(None, 'GM')

('(\HasNoChildren) "/"' の部分が何なのかわかりません。)

于 2008-10-09T00:38:53.877 に答える