Pythonでメール送信時に送信者に日本語を使用する |
以前、このblogにも書いたのですが・・・
Python でメール送信
Debian lennyで動かすと、差出人が文字化けしてしまいました。。。
たぶん、Python2.5から仕様が変わっているんだと思います。
メールの差出人に日本語を設定するには、
iso-2022-jpでエンコードされた日本語 <メールアドレス>
と指定してやる必要があります。
ここで気をつけないといけない点は、
※メールアドレスはエンコードしてはいけない。
以上を踏まえて、Pythonでメールを送信するサンプルプログラムはこんな感じ。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
OUTPUT_ENCODING = 'ISO-2022-JP'
#メールサーバー
smtp_server = 'smtp.example.com'
#送信者
sender = 'sender@example.com'
#受信者(リストで複数指定)
reader = ['read1@example.com', 'read2@example.com']
#メーラーが表示する送信者
sender_name = u"日本語の送信者名"
#件名
subject = u"日本語の件名も苦労します。"
#本文
body = u"日本語の本文です。"
# 'text/plain; charset="encoding"'というMIME文書を作ります
msg = MIMEText(body.encode(OUTPUT_ENCODING), 'plain', OUTPUT_ENCODING)
msg['Subject'] = Header(subject.encode(OUTPUT_ENCODING), OUTPUT_ENCODING)
from_jp = u"%s <%s>" % (str(Header(sender_name, OUTPUT_ENCODING)), sender)
msg['From'] = from_jp
msg['To'] = ','.join(reader)
msg['Date'] = formatdate()
s = smtplib.SMTP(smtp_server)
s.sendmail(sender, reader, msg.as_string())
s.close()
Python2.4までは、
from_jp = u"%s <%s>" % (Header(sender_name, OUTPUT_ENCODING), sender)
こういう指定でOKでしたが、2.5からは
from_jp = u"%s <%s>" % (str(Header(sender_name, OUTPUT_ENCODING)), sender)
明示的にstrしてやる必要があるみたい。
・・・めちゃはまりました。