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