2009-03-31 3 views
8

誰かが、imaplib.fetchでプルダウンするメッセージのPythonでHeaderParserクラスを使用する良い例はありますか?pythonでimaplib.fetchとemail.HeaderParserを使用していますか?

私は多くの関連するものを見つけることができましたが、これだけのことはありません。

フェッチする必要がありますか?RFC822がありますか?私は単に被験者を下ろすことを望んでいた。

ありがとうございます!

答えて

18

良いニュース:あなたは正しいです...あなたはRFC822をプルダウンする必要はありません。 message_partsのパラメータをfetch()に設定すると、きめ細かく調整できます。 fetchに2番目の引数として渡すことができるメッセージ部分の完全なリストは、IMAP4仕様である

import imaplib 
from email.parser import HeaderParser 

conn = imaplib.IMAP4('my.host.com') 
conn.login('[email protected]', 'mypassword') 
conn.select() 
conn.search(None, 'ALL') # returns a nice list of messages... 
         # let's say I pick #1 from this 

data = conn.fetch(1, '(BODY[HEADER])') 

# gloss over data structure of return... I assume you know these 
# gives something like: 
# ('OK', [(1 (BODY[HEADER] {1662', 'Received: etc....')]) 
header_data = data[1][0][1] 

parser = HeaderParser() 
msg = parser.parsestr(header_data) 
<email.message.Message instance at 0x2a> 

print msg.keys() 
['Received', 'Received', 'Received', 'Cc', 'Message-Id', 'From', 'To', 
'In-Reply-To', 'Content-Type', 'Content-Transfer-Encoding', 'Mime-Version', 
'Subject', 'Date', 'References', 'X-Mailer', 
'X-yoursite-MailScanner-Information', 
'X-yoursite-MailScanner', 'X-yoursite-MailScanner-From', 'Return-Path', 
'X-OriginalArrivalTime'] 

http://tools.ietf.org/html/rfc1730#section-6.4.5

+1

ここだけヘッダをフェッチする方法の簡単な例です私の場合、私は 'header_data = data [0] [1] .decode( 'utf-8')'を実行しなければなりませんでした。これが誰かを助けることを望みます。 –

+0

@AndreiStalbeはい、これはPython 3で必要です。IMAP.fetch()はバイト文字列を返し、 'HeaderParser.parsestr()'は文字列を受け取るためです。 –

+0

@AndreiStalbe、オハイオ州オハイオ州、私はちょうどそれを考え出して30分過ごした。私は将来のコメントを読む必要があります! Btw、 'utf-8'はデフォルトのエンコーディングですので、指定する必要はありません。 – mihai

関連する問題