AppengineメールAPI

94 views
Skip to first unread message

Ian Lewis

unread,
Mar 2, 2009, 9:22:18 AM3/2/09
to google-app-...@googlegroups.com
こんばんは、イアンです。

突然ですが、
現在、アプリからGoogle AppengineのメールAPIでメールを送信すると、どの内容を送信しても、Content-Typeのヘッダーが text/plain; charset="us-ascii"に設定されちゃいます。

Content-Typeを指定できる機能も持っていません。

なので、今はGoogle Appengineから日本語メールをちゃんと送信することができない状況です。

皆さん、もしよろしければ、以下のバグにStarを付けてしてください。
http://code.google.com/p/googleappengine/issues/detail?id=639&colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component
よろしくお願いします。

--
=======================================
株式会社ビープラウド  イアン・ルイス
〒150-0012
東京都渋谷区広尾1-11-2アイオス広尾ビル604
email: ianm...@beproud.jp
TEL:03-5795-2707
FAX:03-5795-2708
http://www.beproud.jp/
=======================================

Takashi Matsuo

unread,
Mar 2, 2009, 9:41:45 AM3/2/09
to google-app-...@googlegroups.com
こんばんは

2009/3/2 Ian Lewis <ianm...@gmail.com>:


> こんばんは、イアンです。
>
> 突然ですが、
> 現在、アプリからGoogle AppengineのメールAPIでメールを送信すると、どの内容を送信しても、Content-Typeのヘッダーが
> text/plain; charset="us-ascii"に設定されちゃいます。
>
> Content-Typeを指定できる機能も持っていません。
>
> なので、今はGoogle Appengineから日本語メールをちゃんと送信することができない状況です。

私が試したところ、下記のようにすると、

mail.send_mail(sender="matsuo....@gmail.com",
to="Takashi Matsuo <tma...@example.com>",
subject=u"どうもね!",
body=u"どうも!\nありがとう")

subject は iso-2022 Bエンコード
Body は iso-2022

という一般的な形式に勝手に変換してくれました。

もしかして自前で iso-2022 にすると Ian のような状況に遭遇してしまうので
しょうか... 良かったら私のコードのように単純に unicode を渡してみたら
どうなるか試してみてください。

Happy coding :-)

-- Takashi Matsuo

Atsushi Odagiri

unread,
Mar 2, 2009, 10:06:11 AM3/2/09
to google-app-...@googlegroups.com
小田切です。

日本語メールについては、過去トピックになってますね。

http://groups.google.com/group/google-app-engine-japan/browse_thread/thread/309bd2d3390f2467

このときはUTF-8で渡すとiso-2022-jpになってましたが、今はユニコード文字列を渡すのが正当な方法なのでしょうか?

2009/3/2 Takashi Matsuo <matsuo....@gmail.com>:
--
/*
Atsushi Odagiri
http://blog.aodag.jp
mailto:aod...@gmail.com
*/

くまきち

unread,
Mar 2, 2009, 8:05:11 PM3/2/09
to google-app-...@googlegroups.com
おはようございます

くまきちです。

> このときはUTF-8で渡すとiso-2022-jpになってましたが、今はユニコード
>文字列を渡すのが正当な方法なのでしょうか?

私のダウンローダーではこんな感じでやってます。

_body = u"%sさんからファイルのダウンロードのお願いです\n" % _user
_body = _body + u"URLをクリックしてダウンロードしてください\n"
_body = _body + "http://gonstrgtest.appspot.com/DownMsg?key=%s\n" % _md5
_body = _body + u"%sまで有効です\n" % unicode( _date_str, 'utf-8' )
_body = _body + u"以下本文-----\n%s" % _mail_body
_sender_address = "t.kum...@gmail.com"
_subject = "ファイルダウンロード"
mail.send_mail( _sender_address, _mail_to, _subject, _body )

これで、受信したときのヘッダーは下記のようになってます。
Content-Type: text/plain; charset=ISO-2022-JP; format=flowed; delsp=yes
Content-Transfer-Encoding: 7bit

わたしは、sender_addressが自分でないとダメってのに引っかかりました。。

Ian Lewis

unread,
Mar 2, 2009, 11:51:00 PM3/2/09
to google-app-...@googlegroups.com
なるほどです。

ローカルdev_appserverで動かして、ローカルsendmail (exim4)でメール送ろうとすると、どうやら(unicodeで渡しても) us-asciiになってしまいました。

私は本番環境で試してみてないですが、もしかして本番環境はdev_appserverとは違いますかね?

イアン

2009/3/3 くまきち <t.kum...@gmail.com>

Ian Lewis

unread,
Mar 3, 2009, 9:36:48 AM3/3/09
to google-app-...@googlegroups.com
やっぱりダメです。

ローカル環境(1.1.9)でメール送りますとContent-Typeがこうなります。

Content-Type: text/plain; charset="us-ascii"
本番環境で試してみると、500エラーがでます。(エンコードエラーかな。Djangoにcatchされて隠れてるから今のところわかんない)

イアン

2009/3/3 Ian Lewis <ianm...@gmail.com>

mopemope

unread,
Mar 4, 2009, 11:40:10 AM3/4/09
to Google-App-Engine-Japan
松原です。

同じ問題でどうしようかなあと思ってます。
SDK内ではemailの作成はpythonの標準のemailモジュールを使っています。
MIMETextを使ってるのですが、charsetを渡してないのでデフォルトのus-asciiになるんだと思います。
逆に問題ない方がなんで問題ないのか凄く気になるんですよね。。。

Takashi Matsuo

unread,
Mar 4, 2009, 6:05:04 PM3/4/09
to google-app-...@googlegroups.com
松尾です。

2009/3/5 mopemope <yutaka.m...@gmail.com>:

済みません。おっしゃる通り SDK だと文字化けしますね。本番環境でだけ試してました。
私の方でもちょっと調べてみます。

# 松原さんの方が解決は早そうですが...

happy coding :-)

-- matsuo

Ian Lewis

unread,
Mar 4, 2009, 7:04:48 PM3/4/09
to google-app-...@googlegroups.com
mope,

私も確認しました。本番環境ではちゃんと iso-2022-jp になります (半角カタカナとか入るとどうなるよくわかんないけど)

僕の場合は本番環境で出たエラーは結局 InvalidSenderで、send_mailのtoは開発者のメルアドか、ユーザのメルアドしか使えないみたいです。dev_appserverではtoがどう定義しても、送れます。お気をつけてください。

イアン

2009/3/5 Takashi Matsuo <matsuo....@gmail.com>

yutaka matsubara

unread,
Mar 4, 2009, 8:10:51 PM3/4/09
to google-app-...@googlegroups.com
松原です。

Ian解決したようでよかったです。

私もたった今やってみました。
本番環境では問題ないようですね。

あと1.1.8ぐらいから(かな?)本文、件名などunicodeにしておくとencode('utf-8')を内部でやってくれるようになってます。
なので今はunicodeで渡してしまってもいいです。

あとどうしてもSDKで化けるのが嫌な人はSDK内google/appengine/api/mail.pyの以下のところをいじるといいと思います。

237 def mail_message_to_mime_message(protocol_message):
238   """Generate a MIMEMultitype message from protocol buffer.
239
240   Generates a complete MIME multi-part email object from a MailMessage
241   protocol buffer.  The body fields are sent as individual alternatives
242   if they are both present, otherwise, only one body part is sent.
243
244   Multiple entry email fields such as 'To', 'Cc' and 'Bcc' are converted
245   to a list of comma separated email addresses.
246
247   Args:
248     message: Message PB to convert to MIMEMultitype.
249
250   Returns:
251     MIMEMultitype representing the provided MailMessage.
252   """
253   parts = []
254   if protocol_message.has_textbody():
255     parts.append(MIMEText.MIMEText(protocol_message.textbody()))
256   if protocol_message.has_htmlbody():
257     parts.append(MIMEText.MIMEText(protocol_message.htmlbody(),
258                                    _subtype='html'))




Reply all
Reply to author
Forward
0 new messages