PythonでIMAP検索を実行するにはどうすればよいですか(Gmailとimaplibを使用)?
質問
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"')
IMAPフォルダーとまったく同じようにラベルにアクセスします、Googleによると。
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;」の部分が何であるかわかりません。)