始めは日本語は駄目かと思ったんですが。
The Mail APIを見ながら、GAEアプリからメールを飛ばしてみました。結論から言うと、このAPIのsend_mail()メソッドは、文字コードを自動認識するようです。
例えば、ASCIIだけのメールを送ると、Content-Type: ヘッダはこうなります。
MIME-Version: 1.0 Subject: new message! Content-Type: text/plain; charset=ISO-8859-1; Format=Flowed Content-Transfer-Encoding: 7bit hira.tara posted: this is ascii.
ところが、日本語を含むメールを送ると、こんな感じになるのです。
MIME-Version: 1.0 Subject: new message! Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit hira.tara posted: こんどはにほんご
すげー。さらに韓国語だとこうなりました。(文字化けしてるのはメールのソースをそのまま張ったから)
MIME-Version: 1.0 Subject: new message! Content-Type: text/plain; charset=EUC-KR Content-Transfer-Encoding: 8bit hira.tara posted: Çѱ¹¾î·Î ¸ÞÀÏÀ» º¸³À´Ï´Ù
ひえー。
ちなみに、send_mail()関数の使い方でちょっとハマりました。ASCIIのメールは余裕だったんですが、日本語のメールを送る場合は注意が必要です。
まず、やっちゃ駄目なことです。
- send_mail()関数にunicode文字列を渡す → エラーになる
- send_mail()関数にiso-2022-jpにした文字列を渡す → 文字化ける*1
正しい使い方は、send_mail()関数にutf-8のstrを渡す、です。self.request.get()で得た値はunicode文字列なので、encode('utf-8')して利用しましょう。
*1:charsetが指定されないから