このガイドでは、Mail API を使用してメールを受信する方法について説明します。
アプリに送信されるメール メッセージは、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 ウェブ フレームワークを使用する際は、InboundEmailMessage
コンストラクタが HTTP リクエスト本文のバイト列を取り込みます。Python では、InboundEmailMessage
オブジェクトを作成する方法が複数あります。Flask では、request.get_data()
によってリクエスト バイト列が与えられます。InboundEmailMessage
オブジェクトにメール メッセージが含まれます。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] をクリックします。
開発用サーバーの実行方法については、ローカル開発用サーバーをご覧ください。
Mail API の移行に関する考慮事項を確認する。メールハンドラ ガイドをご覧ください。