App Engine Mail API から SMTP ベースのサービスに移行する

メールのセキュリティを強化し、大量メールの安定した送信を確保するために、以前の Mail API から、SMTP(Simple Mail Transfer Protocol)を使用する標準的なサードパーティ メール プロバイダ サービス(SendGridMailgunMailjet など)に移行してください。

このガイドでは、送信メール サービスを Mail API から SMTP ベースのメールサービスに移行する手順について説明します。これらの手順は、SMTP を利用する任意のサードパーティ メール プロバイダへの移行に適用でき、別のサポート対象ランタイムでも使用できます。なお、このガイドでは、サードパーティのサービスを使った受信メッセージングの移行手順については扱いません。

SMTP 標準には、以前の App Engine Mail API に比べて次のようなメリットがあります。

  • SMTP ベースのサービスを利用すると、メールが迷惑メールとして扱われる可能性が低くなるため、メール配信の成功率が向上します。

  • SMTP ベースのサービスでは、メールの開封、クリック、バウンスに関する詳細な分析レポートを利用できます。これらのレポートは、ユーザーがメールにどのように反応しているかについて有用な情報を提供します。

  • 送信者レピュテーションとメール認証を完全に管理できます。

  • 以前の Mail API と比較して 1 日あたりの送信上限が増加し、A/B テストやセグメンテーション、テンプレート作成といった高度な機能も利用できます。

移行プロセスの概要

移行プロセスには次の手順が含まれます。

  1. SMTP ベースのメールサービスを設定して、SMTP 認証情報を取得します。
  2. 送信元の正当性確認を行って、ドメインまたはメールアドレスで認証します。
  3. SMTP の認証情報と送信方法を設定してソースファイルを構成し、その後アプリケーションをデプロイします。
  4. アプリケーションをテストして、メール機能を確認します。

SMTP ベースのメールサービスを設定する

SendGrid、Mailgun、Mailjet などの SMTP を使用する標準的なサードパーティ メール プロバイダでアカウントを設定し、選択したプロバイダから次の情報を取得してください。

  • SMTP ホスト: メールの送信に使用される SMTP サーバーのアドレス。例: smtp.sendgrid.net または example.mailjet.com

  • ポート: 接続に使用するポート番号。たとえば、TLS 暗号化の場合は 587

  • ユーザー名: アカウントの SMTP ログイン ユーザー名。

  • パスワードまたは API キー: アカウントのパスワード、または SMTP 接続のパスワードとして機能する API キー。SendGrid などの一部のプロバイダでは、ユーザー名は apikey などの固定値となり、API キーがパスワードとして使用されます。

送信元の正当性確認を行う

迷惑メール防止のため、すべてのメールサービスにおいて、メール送信元のメールアドレスまたはドメインの所有者であることを確認する必要があります。このステップでは、多くの場合、ドメインホストの DNS 管理ページに CNAME レコードなどの特定の DNS 詳細を追加します。

アプリケーションの設定を進める前に、プロバイダの指示に従って送信者の本人確認を行ってください。

ドメインホストに DNS レコードを追加する手順は次のとおりです。

  1. DNS プロバイダのサービスにログインします。
  2. ドメインの DNS 管理ページに移動します。
  3. メール サービス プロバイダから提供された CNAME レコードをそのまま追加します。レコードごとに、次の操作を行います。

    • [名前] または [ホスト] フィールドに、ドメインホストの詳細を入力します。
    • [ポイント] または [] フィールドに値を入力します。

DNS の変更が有効になるまで数時間かかることがあります。確認に失敗した場合は、しばらく待ってからもう一度お試しください。

ソースファイルを構成する

SMTP 機能を組み込む手順は次のとおりです。

  1. 次のコマンドを実行して、App Engine SDK を最新バージョンに更新します。

    # Ensure your virtual environment is active
    pip install --upgrade appengine-python-standard
    # Save the new version to your requirements file
    pip freeze > requirements.txt
    
  2. app.yaml ファイルに次のコードを追加して、SMTP サービスに切り替えます。

    runtime: RUNTIME  # a supported python version
    
    env_variables:
      # Enable the SMTP service.
      APPENGINE_USE_SMTP_MAIL_SERVICE: "true"
    
      # --- SMTP Server Configuration ---
      # The server address from your mail provider
      APPENGINE_SMTP_HOST: "SMTP_HOST"
    
      # The recommended port for TLS connections
      APPENGINE_SMTP_PORT: "587"
    
      # The username for your SMTP login
      APPENGINE_SMTP_USER: "SMTP_USER"
    
      # The API key or password
      APPENGINE_SMTP_PASSWORD: "SMTP_PASSWORD"
    
      # Use TLS for a secure connection
      APPENGINE_SMTP_USE_TLS: "true"
    
      # --- For sending emails to Admins ---
      # A comma-separated list of admin email addresses.
      # This is required if you use the send_mail_to_admins() function.
      APPENGINE_ADMIN_EMAIL_RECIPIENTS: "admin@example.com,another-admin@example.com"
    

    次のように置き換えます。

    • RUNTIME: サポートされている Python ランタイム バージョン。
    • SMTP_HOST: SMTP ホストアドレス。たとえば、smtp.sendgrid.netexample.mailjet.com です。
    • SMTP_USER: アカウントの SMTP ログイン ユーザー名。例: apiKey
    • SMTP_PASSWORD: サードパーティのメール プロバイダから取得したパスワードまたは API キー。セキュリティを強化するため、app.yaml ファイルに API キーを配置するのではなく、Secret Manager を使用して API キーを保存することをおすすめします。
    • send_mail_to_admins() 関数を使用しない場合は、APPENGINE_ADMIN_EMAIL_RECIPIENTS 設定を省略します。
  3. 次のコマンドを実行して、アプリケーションをデプロイします。

    gcloud app deploy
    

アプリケーションをテストする

エラーなしでアプリをデプロイできれば、移行は成功です。メールサービスが機能していることを確認する手順は次のとおりです。

  1. アプリケーションの、メールを送信する部分をトリガーします。
  2. ログ エクスプローラを確認して、API 呼び出しまたは SMTP 接続の試行に関連するエラーがないことを確認します。
  3. サードパーティのメール プロバイダのアカウント(Mailgun、Mailjet、SendGrid)にログインして、アクティビティ フィード、ログ、配信ダッシュボードを確認します。テストメールがフィードに表示され、配信ステータスが ProcessedDelivered などと表示されます。

次のステップ