Pythonで、とあるwebアプリを作ってるんですが、
フォームの内容をメールで送信するためにどうするのか調べてました。
こんな記事を見つけたのでマネてみました。
http://labs.unoh.net/2007/06/python_2.htmlいくつか分類があるんですが
わたしはSMTPを立ててないのでgmailを使う方法をテストしてみました。
ほぼ踏襲してるのでわざわざ自分のブログに書くこともないんですが、
文字コード関連ではまったのでメモ。
まず記事をマネして作ったもの。
# coding: utf-8
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
from_addr = 'hoge@gmail.com'
to_addr = 'fuga@fuga.com'
subject = u'タイトル'
body = u'本文'
encoding = 'utf-8'
msg = MIMEText(body, 'plain', encoding)
msg['Subject'] = Header(subject, encoding)
msg['From'] = from_addr
msg['To'] = to_addr
msg['Date'] = formatdate()
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login('hoge@gmail.com', 'PASSWORD')
s.sendmail(from_addr, to_addr, msg.as_string())
s.close()
が、こんな感じのエラーが発生。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
内容をよく見ると
msg = MIMEText(body, 'plain', encoding)
で引っかかってるらしい。
bodyの中身をascii文字だけにするとエラーが出なくなるので
ここが原因でまちがいなさそうだけど
msg['Subject'] = Header(subject, encoding)
はsubjectに日本語入ってても平気…why?
google先生に聞いてあちこち彷徨ったものの、
解決法がなかなか見つからない。
そしたらとうとう同じ目にあってる方を見つけました。
http://d.hatena.ne.jp/tomisima/20070718msg = MIMEText(body, 'plain', encoding)
↓
msg = MIMEText(body.encode(encoding), 'plain', encoding)
に直すだけで良いらしい。
で、マネしたら出来ました。
でも、
msg = MIMEText(body, 'plain', encoding)
を紹介してる人はこのやり方でできてるってことですよねぇ。
なんの違いなんでしょうか、よくわからん。。。改めて勉強不足を痛感。