アプリに送信されるメール メッセージは、MIME データを含む HTTP リクエストとして実装されます。受信メール メッセージを処理するには、アプリの構成でメールアドレスをスクリプト ハンドラに関連付けてから、ハンドラをアプリのコードに追加します。
これにより、受信メールから HTTP リクエストが生成され、適切なスクリプトに渡されます。受信メールを処理するスクリプトは、デフォルトのサービスに存在している必要があります。
メールサービスの詳細については、Mail API の概要をご覧ください。
メールを受信するアプリの構成
新しくアプリを作成すると、受信メールはデフォルトで無効になっています。受信メールを有効にするには、デフォルトのサービスで app.yaml
ファイルを変更する必要があります。
受信メールサービスを有効にする
inbound_services
セクションを追加します。 次に例を示します。このセクションを構成ファイルに追加して受信メールを有効にしないと、受信メールは無効になり、アプリに送信されるメール メッセージは無視されます。
URL にマッピングされたメールアドレスとスクリプト ハンドラを関連付けるマッピングを追加します。
デフォルト サービスの場合、メール受信用のメールアドレスの形式は次のとおりです。
[STRING]@[Google Cloud project ID].appspotmail.com
デフォルト以外のサービスの場合、メールアドレスの形式は次のようになります。
[STRING]@[servicename]-dot-[Google Cloud project ID].appspotmail.com
メール メッセージは、次の URL を使用する HTTP POST リクエストとしてアプリに送信されます。[ADDRESS] はドメイン名を含む完全なメールアドレスです。
/_ah/mail/[ADDRESS]
受信メールをアプリで処理するには、
app.yaml
ファイルでメールの URL をハンドラにマッピングします。上記の例で、
/_ah/mail/.+
はアプリ宛てのすべてのメールアドレスを照合します。次の例のように、メールアドレスごとに複数のハンドラを設定することもできます。受信メール メッセージの URL がこのリストの先頭から最後までの項目と照合されます。メール メッセージの URL が複数のパターンと一致した場合は、最初に一致したハンドラが実行されるハンドラになります。最後のマッピングに catchall ハンドラを入れることもできます。ハンドラはデフォルトのモジュール(またはアプリ バージョン)で実行されます。
受信メールの処理
Python SDK では、受信メールを処理するためのウェブ アプリ クラス InboundMailHandler
が定義されています。InboundMailHandler
は、google.appengine.ext.webapp.mail_handlers
パッケージにあります。
「InboundMailHandler
」を使用するには、
InboundMailHandler
のサブクラスを作成し、receive()
メソッドをオーバーライドします。- Python SDK で定義されているクラス
InboundEmailMessage
の引数を使用してreceive()
メソッドを呼び出します。
たとえば、次のように InboundEmailMessage
のインスタンスを作成できます。
InboundMailHandler
には、すべての受信メールアドレスとメールハンドラの一致ペアを返す mapping()
コンビニエンス クラス メソッドが含まれます。これは、InboundMailHandler
の任意のサブクラスで呼び出すことができます。
InboundEmailMessage
オブジェクト(この例では mail_message
)にメール メッセージが含まれています。bodies()
メソッドがメッセージ内の本文を返します。bodies()
を引数なしで呼び出すと、先に HTML 形式の本文、次にテキスト形式の本文を返すイテレータが返されます。HTML または書式なしテキストのいずれかが必要な場合は、次のように bodies()
に引数を渡すことができます。
InboundEmailMessage
オブジェクトには、その他のメッセージ フィールドにアクセスするための属性が含まれます。
subject
にはメッセージの件名が含まれます。sender
は、"Nobody <nobody@example.com>"
のような、送信者のアドレスです。to
は、"Joe <joe@example.com>, Bill <bill@example.com>"
のようなメッセージ受信者のカンマ区切りリストです。cc
には、"Joe <joe@example.com>, Bill <bill@example.com>"
のような cc 受信者のカンマ区切りリストが含まれます。date
はメッセージの日付を返します。attachments
はAttachment
オブジェクトのリストです。空の場合もあります。original
は、Python のemail.message.Message
のような、他のフィールドによって公開されないデータ(メールヘッダーなど)を含む完全なメッセージです。
ローカル開発用サーバーでの受信メッセージのシミュレーション
受信メールを処理するようにアプリを設定すると、開発用サーバーのコンソールで受信メール メッセージのシミュレーションを行うことができます。
- http://localhost:8080/console に移動して [Sign in as administrator] を選択し、管理者として開発用サーバーにアクセスします。
- 開発用サーバーで、ナビゲーションにある [Inbound Mail] をクリックします。
表示されたフォームに入力して、[Send Email] をクリックします。
開発用サーバーの実行方法など、詳細については、Python 開発用サーバーをご覧ください。