東京の風景。勉強したこと。感じたこと。の雑記帳。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Pythonで日本語メールを送る。

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/20070718

msg = MIMEText(body, 'plain', encoding)

msg = MIMEText(body.encode(encoding), 'plain', encoding)
に直すだけで良いらしい。
で、マネしたら出来ました。

でも、
msg = MIMEText(body, 'plain', encoding)
を紹介してる人はこのやり方でできてるってことですよねぇ。
なんの違いなんでしょうか、よくわからん。。。改めて勉強不足を痛感。
スポンサーサイト
プロフィール

ひかる

  • Author:ひかる
  • SE っぽいバイトで学費を稼ぎつつ,コンピュータの研究をしている大学院生.主に P2P のような分散システムを扱っている.

    最近のマイブームは写真を撮ること.

    眼と頭が悪い.万年金欠.


    本ブログに記載されている情報は,自己責任の下でご利用ください.
    損害等が発生しても当方は一切責任を負いません.
天気予報

-天気予報コム- -FC2-
FC2カウンター
タグcloud
最近の記事
最近のコメント
最近のトラックバック
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
ブログ内検索
RSSフィード
リンク
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。