アプリに送信されるメール メッセージは、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には、cc 受信者のカンマ区切りリストが含まれます。例:"Joe <joe@example.com>, Bill <bill@example.com>"dateは、メッセージの日付を返します。attachmentsはAttachmentオブジェクトのリストです。空の場合もあります。originalは、Python のemail.message.Messageのような、他のフィールドによって公開されないデータ(メールヘッダーなど)を含む完全なメッセージです。
ローカル開発用サーバーでの受信メッセージのシミュレーション
受信メールを処理するようにアプリを設定すると、開発用サーバーのコンソールで受信メール メッセージのシミュレーションを行うことができます。
- http://localhost:8080/console に移動して [Sign in as administrator] を選択し、管理者として開発用サーバーにアクセスします。
- 開発用サーバーで、ナビゲーションにある [Inbound Mail] をクリックします。
表示されたフォームに入力して、[Send Email] をクリックします。
開発用サーバーの実行方法などの詳細については、Python 開発用サーバーをご覧ください。