Google Cloud Platform(2) Advent Calendar 2016の18日目の記事です。
使っていて便利だと思っているGAEのメール受信機能を紹介します。
Receiving Email
この機能は、[任意の文字列]@appid.appspotmail.comにメールを送ることで、HTTPリクエストとしてメールをGAEで受けることができます
これでクレジットカード会社からの請求メールを受信して請求額などをDatastoreやBigQueryに入れたり、広告メールの中に自分が必要なキーワードがあれば通知するようにしています
使い方
GAE/Pyです
メール受信を有効化
設定をapp.yaml
に追加します
app.yaml
inbound_services:
- mail
ルーティングの設定
通常のルーティングの設定と同じですが、url
の部分が多少異なります
app.yaml
- url: /_ah/mail/.+
script: receive_email.app
login: admin
この場合メールを全てreceive_email.py
で処理します
送信先ごとに処理内容を変える場合
- url: /_ah/mail/owner@.*your_app_id\.appspotmail\.com
script: handle_owner.app
login: admin
- url: /_ah/mail/support@.*your_app_id\.appspotmail\.com
script: handle_support.app
login: admin
- url: /_ah/mail/.+
script: handle_catchall.app
login: admin
メールの受信処理
InboundMailHandler
クラスを継承してreceive
メソッドをオーバーライドします
# coding: utf-8
import logging
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
import webapp2
class MailReceiveHandler(InboundMailHandler):
def receive(self, mail_message):
text_body = mail_message.bodies('text/plain')
# text_body = mail_message.bodies('text/html') #HTMLメール
for content_type, body in text_body:
logging.info(body.decode())
logging.info(mail_message.sender)
app = webapp2.WSGIApplication([
MailReceiveHandler.mapping()
], debug=True)
その他以下のようなものが取得できます
- subject
- sender
- to
- cc
- date
- attachments
- original
デバッグ
admin serverからメールを送信してローカルでデバッグすることができます
以上、こんな感じに使って、こんなことをしているという紹介でした