Views
MIME メッセージ
- Python には email というパッケージが標準で入っている
- Python で MIME メッセージを扱うことができる
- email のマニュアル
日本語メッセージ作成
- 日本語のメッセージを作成するうえで、問題となるのは
- 日本のインターネット標準(?) -- RFC1468
- ISO-2022-JP を使用と規定(Informational なので拘束力はないはず)
- いまだに ISO-2022-JP 以外は使えないメールソフトを使用している人もいる
- 日本のインターネット黎明期からのうるさい人だったりすることもある
ところがシステムの方は
- DOS/Win は Shift_JIS -> CP932
- Mac は Shift_JIS -> UTF-8
- UNIX は EUC-JP -> UTF-8
- 流れは unicode (UTF-8)へ
プログラム
- mkmsg.py という名前で作成(後で使用する)
# -*- coding: utf-8 -*- from email.Message import Message from email.Header import Header subject = '試験的主題' body = """あーあー 本日は晴天なり。 """ s = Header(unicode(subject, 'utf-8').encode('iso-2022-jp'), charset='iso-2022-jp', header_name='Subject') msg = Message() msg['Subject'] = s msg.set_payload(unicode(body, 'utf-8').encode('iso-2022-jp'), charset='iso-2022-jp') print msg.as_string()
実行してみる
$ python mkmsg.py Subject: =?iso-2022-jp?b?GyRCO244M0UqPGdCahsoQg==?= MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit $"!<$"!< K\F|$O@2E7$J$j!#
メールを送信する
- このままだとメールが読めないので、自分あてに送ってみる
- sendmsg.py で作成(アドレスは自分自身のものを使う)
from smtplib import SMTP from mkmsg import msg fromaddr = 'xxxxxx@is.kochi-u.ac.jp' toaddrs = ['xxxxxx@is.kochi-u.ac.jp'] msg['From'] = fromaddr msg['To'] = ','.join(toaddrs) smtp = SMTP('mail.is.kochi-u.ac.jp') smtp.sendmail(fromaddr, toaddrs, msg.as_string()) smtp.quit()
メールを読む
- 自分のターミナルでもメールが読めるといい
python mkmsg.py > msg.txt
でファイルに入れておく# -*- coding: utf-8 -*- from email import message_from_file from email.Header import decode_header msg = message_from_file(open('msg.txt')) h = decode_header(msg.get('subject')) subject = '' for s, c in h: subject += unicode(s, c).encode('utf-8') cset = msg.get_param('charset') b = msg.get_payload(decode=True) body = unicode(b, cset).encode('utf-8') print '件名:', subject print print body