sitecustomize.pyを設定しない運動その1(Pythonで日本語メール送信)


Pythonでメールを送るときにはsmtplibをつかうんですが、
Webでそれ系の記事を探すとグーグル様の上位だとここに行き着きます。


ウノウラボ Unoh Labs: Pythonでメールを送信したい人のためのサンプル集


でも、このサンプルsitecustomize.pyがutf-8を前提として書いてるので、実行すると。。。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

おきまりの、UnicodeEncodeErrorを吐いて動かない。


どんだけーーーーー!!!


というわけで、sitecustomize.pyを変更していなくても動くようにサンプル書き換えました。
やったことはcreate_message()の MIMEText(body....) → MIMEText(body.encode(encoding), ....)ってしただけです。
(つか、元々のサンプルってsmtplib.SMTP()ってなってた動かないんですけどw)

# coding=utf-8

import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate


def send(from_addr, to_addr, msg):
    s = smtplib.SMTP('localhost')
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()

def create_message(from_addr, to_addr, subject, body, encoding):
    # 'text/plain; charset="encoding"'というMIME文書を作ります
    msg = MIMEText(body.encode(encoding), 'plain', encoding)
    msg['Subject'] = Header(subject, encoding)
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
    return msg

if __name__ == '__main__':
    from_addr = 'test-sender@example.com'
    to_addr = 'test@example.com'
    msg = create_message(from_addr, to_addr, u'テスト', u'テスト本文', 'ISO-2022-JP')
    send(from_addr, to_addr, msg)


いい加減、sitecustomize.py == utf-8という前提はやめていただきたい。
だって、sitecustomize.pyがcp392だったらどうするのよ?w
ユーザーが悪い?そんな馬鹿な ちょっっっw