Skip to content.

kagome.lab.tkikuchi.net

Sections
Personal tools
You are here: Home » Members » tkikuchi's Home » 授業 » 英語ゼミナール
Views

MIME メッセージ

Document Actions

email

  • 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
    
Created by tkikuchi
Last modified 2007-01-09 12:06
 

Powered by Plone

This site conforms to the following standards: