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.netexample.mailjet.com

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

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

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

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

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

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

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

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

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

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

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

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

  1. 次のコマンドを実行して Maven をインストールします。

    sudo apt install maven
    
  2. pom.xml ファイルに次のコードを追加して、SMTP サービスに切り替えます。

    1. appengine-api-1.0-sdk 依存関係のバージョンを追加します。

       <dependency>
         <groupId>com.google.appengine</groupId>
         <artifactId>appengine-api-1.0-sdk</artifactId>
         <version>2.0.38</version>
       </dependency>
      
    2. プロジェクト ID を更新します。

        <configuration>
          <deploy.projectId>PROJECT-ID</deploy.projectId>
          <deploy.version>1</deploy.version>
        </configuration>
      

      PROJECT-ID は、実際の Google Cloud プロジェクト ID に置き換えます。

  3. appengine-web.xml ファイルに次の環境変数を追加して、SMTP 送信者の構成を含めます。

    ...
    <runtime>RUNTIME</runtime>
    <service>default</service>
    <threadsafe>true</threadsafe>
    <app-engine-apis>true</app-engine-apis>
    <env-variables>
    <!-- This is the master switch to enable the SMTP service.-->
    <env-var name="APPENGINE_USE_SMTP_MAIL_SERVICE" value="true" />
    <!-- SMTP Server Configuration -->
    <!-- The server address from your mail provider.-->
    <env-var name="APPENGINE_SMTP_HOST" value="SMTP_HOST" />
    <!-- The recommended port for TLS connections. -->
    <env-var name="APPENGINE_SMTP_PORT" value="587" />
    <!-- The username for your SMTP login. -->
    <env-var name="APPENGINE_SMTP_USER" value="SMTP_USER" />
    <!-- The API key or password -->
    <env-var name="APPENGINE_SMTP_PASSWORD" value="SMTP_PASSWORD" />
    <!--  Use TLS for a secure connection. -->
    <env-var name="APPENGINE_SMTP_USE_TLS" value="true" />
    </env-variables>
    ...
    </appengine-web-app>
    

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

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

    mvn package appengine:deploy
    

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

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

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

次のステップ