Google App Engine であそんでみよう. (2)

ひきつづき,ZDNet builder の連載
Google App Engineでもうちょっとがんばってみる:メール送信プログラムをみながら.

Log

Python 標準のlogging モジュールを使う.開発用サーバでは, 標準出力に表示される.普通に起動すると, debug レベルのメッセージは表示されないが, --debug をつけることで表示させることができる.

Googleホスティングする App Engine のサーバにデプロイした場合には,管理コンソールから表示させることができるらしい. 至れり尽くせりだ.

import logging

logging.debug("Debug String")

Template

webapp ではDjangoのテンプレートエンジンが利用できる. Djangoはそれ自身独立したWeb Application Frameworkなのだが, Google App Engine では, テンプレートエンジンだけ取り出して利用するようだ. /usr/local/google_appengine/lib/django 以下にdjangoのフルパッケージが展開されているが, ユーザが利用するのは

/usr/local/google_appengine/google/appengine/ext/webapp/template.py 

にあるラッパ.

from google.appengine.ext.webapp import template

rendered = template.render(
   SOME_FILE_PATH, {TO_BE_REPLACED, REPLACEMENT})

と書くと, renderedにテンプレートを置換した文字列が入る.

文字列を時間するだけならPython標準の % 記法で置換してもよさそうなものだと思ったが, よく調べてみると, Djangoのテンプレート機構は遥かに強力で, 中でfor loopを回すこともできるらしい. さまざまなフィルタを使えるのもうれしいところ.

Mail

mail 送信機能も提供されている.

from google.appengine.api import mail

mail.send_mail(sender="xxx@yyy", to="zzz@yyy", 
               subject=SUBJECT, body=MESSAGE_BODY)

とするだけ. うーん,便利だ.

メイルアドレスのフォーマットをチェックして有効かどうかを判断する is_email_valid なんていう関数もある. 添付ファイルをつけたMIMEメッセージの作成もできるようだ.

mail.send_mail(sender="xxx@yyy", to="zzz@yyy", 
               subject=SUBJECT, body=MESSAGE_BODY,
               attachments=[(NAME, CONTENT)])

簡単だ... ただ, 添付できるファイルのMIME Typeは限定されているようで, 指定したファイル名のextension から自動的に決定される. ざっと見たところでは, jpegとかgifとか一般的なものは一通りあるのだけど, ppt や doc などのMS Office系がない... まあ, あまり使わないだろうということか.

App Engineでは

とくに設定は必要ない. ただしsenderアドレスは gmail.com でないとだめらしい.

開発用サーバでは

起動時のオプションでSMTPを設定する必要がある. SMTP認証にも対応している. ローカルにsendmailが動いていればそれを利用することもできるらしい.