メールのタイトルを取得
poplibで取得したメールヘッダからタイトルだけを抜き出して列挙したかったのだが、emailパッケージの使い方がよくわからん。
リファレンスと格闘して何とか取れるようになったのだが、これでいいのだろうか。
# Python 2.6 import poplib from email.parser import FeedParser from email.header import decode_header host = poplib.POP3('pop.mail.example.com') host.user('foobar') host.pass_('abrakadabra') _, mailnums, _ = host.list() for i in mailnums: num, _ = i.split(' ', 1) _, lines, _ = host.top(num, 0) fp = FeedParser() for j in lines: fp.feed(j) fp.feed('\n') mm = fp.close() buf = [] for val, enc in decode_header(mm['Subject']): buf.append(val.decode(enc)) print u''.join(buf) host.quit()
メールの仕様やプロトコルの理解があやふやだと、リファレンスを読んでも使い方がよくわからないのだよ。
追記
charset is None for non-encoded parts of the header
http://docs.python.org/library/email.header.html?highlight=decode_header#email.header.decode_header
ヘッダのうちエンコードされていない部分のcharsetはNoneである
を忘れていたので修正。
for i in mailnums: num, _ = i.split(' ', 1) _, lines, _ = host.top(num, 0) fp = FeedParser() for j in lines: fp.feed(j) fp.feed('\n') mm = fp.close() buf = [] for val, enc in decode_header(mm['Subject']): ## ここから if enc is None: enc = 'ascii' ## ここまでを追加 buf.append(val.decode(enc)) print u''.join(buf)