PythonでIMAP検索を実行するにはどうすればよいですか(Gmailとimaplibを使用)?

StackOverflow https://stackoverflow.com/questions/179026

  •  05-07-2019
  •  | 
  •  

質問

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

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

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

私はこの種のものの多くの例を見つけていません。

役に立ちましたか?

解決

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

" 6.4.4。のセクションをご覧ください。 SEARCHコマンド&quot ;、検索条件に指定できるものはたくさんあります。何かを検索する前に、メールボックス(フォルダのIMAPの名前)を SELECT する必要があることに注意してください。 (複数のフォルダーを同時に検索するには、複数のIMAP接続が必要であることがわかります。) IMAP4.list は、メールボックス識別子が何であるかを理解するのに役立ちます。

imaplib に渡す文字列の定式化にも便利なのは" 9です。正式な構文"上記にリンクされているRFCから。

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

がんばって!

他のヒント

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"')

imaplibをGmailで使用する最も簡単な方法は、 Gmail Imap拡張機能ページ

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

最初に適切なメールとパスワードでアカウントに接続します:

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_search では、 gmailの高度な検索

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

この後、各メッセージをidで取得できます:

for id in data[0].split():
    status, data = gmail.fetch(id, '(BODY[TEXT])')

imaplibが応答解析の多くを行わないことにかなり驚きました。そして、応答は解析しにくいように作成されたようです。

FWIW、私自身の質問に答えるには:     c.search(なし、「GM」)

(「(\ HasNoChildren)&quot; /&quot;」の部分が何であるかわかりません。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top