アプリケーション専用のメールアドレスからメールを送信する

あっという間に3週間ほど放置状態となってしまいました。プライベートで何か忙しくなると、とたんに滞ってしまったりするのが趣味プログラミングの辛いところだったりします。まぁ、あせらず気長に続けていこうと思います。

ちょっと間があきましたが、前回まででTODO情報の登録/編集/削除/閲覧といったところまではできるようになりました。これからどうしていくかですが、せっかく締切という情報を登録しているので、締め切りを過ぎたらメールで知らせるという機能を作っていきたいと思います。

Google App Engineには、一定の間隔で定期的に処理を行うというCron機能が用意されていますので、これを使うことにします。処理の流れとしては、存在するTODO情報のうち締め切りを過ぎていてかつまだ締切メールが送られていないTODO情報を取り出し、そのTODO情報を登録したユーザあてにメールを送るというものです。と、ここまで考えてふと思ったのですが、Google App Engineからメールを送る場合、その送信元のメールアドレスは以下のどちらかのメールアドレスでなければなりません。

  • アプリケーションの管理者のメールアドレス
  • ログインユーザのメールアドレス

今回は定期起動の処理中なので管理者のメールアドレスを使うことになりますが、管理者のメールアドレスというのは私の個人利用のメールアドレスなので、個人で使っているメールアドレスでシステムからのメールを送るのはちょっと恥ずかしい気がします。ここはやはり、金星翻車魚(キンボシマンボウ)専用のメールアドレスを用意して、それを送信元アドレスとしてメールを送りたいところです。

というわけで、アプリケーション専用のメールアドレスからメールを送りたいと思ったらどうしたらいいんだろうかと調べてみると、ドキュメントにちゃんと書いてありました。

If you want to send email on behalf of the application but do not want to use a single administrator's personal Google Account as the sender, you can create a new Google Account for the application using any valid email address, then add the new account as an administrator for the application. To add an account as an administrator, see the "Developers" section of the Admin Console.

http://code.google.com/intl/en/appengine/docs/python/mail/overview.html

言われてみると当たり前の話で、使いたい専用のメールアドレスを用意し、そのメールアドレスでGoogleアカウントを取得して、その新しく作ったGoogleアカウントを該当するアプリケーションの管理者に追加すればいいということです。というわけで、さっそく専用メールアドレスのGoogleアカウントを作ってアプリケーションの管理者に追加しました。なお、アプリケーションの管理者に追加するには、Google App Engineの管理コンソールから、該当のアプリケーションの設定を開いてDevelopersを選択し、追加したい管理者のメールアドレスを入力してInviteボタンを押せばいいです。

これで、専用メールアドレスからメールが送れるようになりました。メールを送信するコードは、以下のようになります。

from google.appengine.api import mail
def cronjob(request):
    message = mail.EmailMessage(sender="...") // 用意した専用の送信元メールアドレス
    message.to = "..." //送信先メールアドレス
    message.subject = u'テストメール'
    message.body = u'''
こんにちは。

これは、金星翻車魚からのお知らせです。
'''
    message.send()
    ...

準備が整いましたので、次から、締切を過ぎたTODOに関してお知らせメールを送る機能を作っていこうと思います。