2016-05-12 11 views
1

未読のメッセージをチェックして表示する簡単なプログラムを作ろうとしていますが、件名と送信者のアドレスを取得する際に問題があります。 は、送信者のために私はこの方法で試してみた:IMAPClient - 件名と送信者を取得するにはどうすればいいですか?

import email 
m = server.fetch([a], ['RFC822']) 
#a is variable with email id 
msg = email.message_from_string(m[a], ['RFC822']) 
print msg['from'] 
from email.utils import parseaddr 
print parseaddr(msg['from']) 

をしかし、それは動作しませんでした。

defaultdict(<class 'dict'>, {410: {b'BODY[HEADER.FIELDS ("FROM")]': b'From: "=?utf-8?q?senderexample?=" <[email protected]>\r\n\r\n', b'SEQ': 357}, 357: {b'SEQ': 357, b'FLAGS': (b'\\Seen',)}}) 

は、第一の方法を修理、または作るための方法があります:私もこの使用

Traceback (most recent call last): 
File "C:/Users/ExampleUser/AppData/Local/Programs/Python/Python35-32/myprogram.py", line 20, in <module> 
msg = email.message_from_string(m[a], ['RFC822']) 
File "C:\Users\ExampleUser\AppData\Local\Programs\Python\Python35-32\lib\email\__init__.py", line 38, in message_from_string 
return Parser(*args, **kws).parsestr(s) 
File "C:\Users\ExampleUser\AppData\Local\Programs\Python\Python35-32\lib\email\parser.py", line 68, in parsestr 
return self.parse(StringIO(text), headersonly=headersonly) 
TypeError: initial_value must be str or None, not dict 

:私はこのエラーになっていたよう

print(server.fetch([a], ['BODY[HEADER.FIELDS (FROM)]'])) 

をが、結果はでした2番目の外観の結果は次のようになります。

Sender Example <[email protected]> 

? また、メールの件名を取得する方法もわかりません。しかし、私はそれが送信者と同じだと思うが、他の議論がある。だから私が必要とするのは、これらの議論だけです。

答えて

0

まず、Pythonで利用可能なさまざまなIMAPライブラリを検討し、必要に応じて使用する必要があります。 IMAP(プロトコル)で必要なデータを取得するには複数の方法があり、Python(およびそのライブラリ)の拡張もあります。

たとえば、IMAPで必要なデータを取得する最も簡単な方法は、ENVELOPEオブジェクトをフェッチすることです。まだASCII以外のデータ(これは=?utf-8?q?...ビットです)のRFC2047エンコーディングのデコードを実行する必要がありますが、少なくともそれは何十年もの互換性構文ルールを持つRFC5322ヘッダー構造を解析する手間を省きます。

関連する問題