從 App Engine Mail API 遷移至以 SMTP 為基礎的服務

為提升電子郵件安全性,並確保大量電子郵件能穩定送達,請從舊版 Mail API 遷移至使用簡易郵件傳輸通訊協定 (SMTP) 的標準第三方電子郵件服務供應商,例如 SendGridMailgunMailjet

本指南說明如何將外寄電子郵件服務從 Mail API 遷移至以 SMTP 為基礎的電子郵件服務。您可以按照這些操作說明,遷移至任何以 SMTP 為基礎的第三方電子郵件服務供應商,或使用其他支援的執行階段。本指南未提供使用第三方替代方案遷移來電訊息的步驟。

與舊版 App Engine Mail API 相比,SMTP 標準具有下列優勢:

  • SMTP 服務可降低電子郵件遭標示為垃圾郵件的機率,進而提高郵件送達率。

  • 使用 SMTP 服務時,您可以存取電子郵件開啟、點擊和退信的詳細分析報告。這些報表提供實用資訊,可瞭解使用者與電子郵件的互動情形。

  • 您可以完全掌控寄件者信譽和電子郵件驗證。

  • 與舊版 Mail API 相比,每日傳送上限更高,且可使用 A/B 測試、分眾和範本等進階功能。

轉換程序總覽

遷移程序包括下列步驟:

  1. 設定 SMTP 型電子郵件服務,取得 SMTP 憑證。
  2. 驗證寄件者身分,透過網域或電子郵件地址進行驗證。
  3. 使用 SMTP 憑證和傳送方法設定來源檔案,然後部署應用程式。
  4. 測試應用程式,檢查電子郵件功能。

設定以 SMTP 為基礎的電子郵件服務

向使用 SMTP 的標準第三方電子郵件服務供應商 (例如 SendGrid、Mailgun 或 Mailjet) 建立帳戶,並從所選供應商擷取下列資訊:

  • SMTP 主機:用於傳送郵件的 SMTP 伺服器位址。例如 smtp.sendgrid.netexample.mailjet.com

  • 「Port」(通訊埠):連線的通訊埠編號。例如 TLS 加密的 587

  • 使用者名稱:帳戶的 SMTP 登入使用者名稱。

  • 密碼或 API 金鑰:帳戶密碼或 API 金鑰,做為 SMTP 連線的密碼。對於 SendGrid 等部分供應商,使用者名稱是 apikey 等固定值,而 API 金鑰則做為密碼。

驗證傳送者身分

為避免垃圾郵件,所有電子郵件服務都會要求您驗證電子郵件地址或網域的擁有權,才能從該地址或網域傳送電子郵件。這個步驟通常需要在網域代管商的 DNS 管理頁面中,加入特定 DNS 詳細資料,例如 CNAME 記錄。

請按照供應商的操作說明驗證寄件者身分,再繼續設定應用程式。

如要將 DNS 記錄新增至網域代管商網站,請按照下列步驟操作:

  1. 登入 DNS 供應商服務。
  2. 前往網域的 DNS 管理頁面。
  3. 請按照電子郵件服務供應商提供的資訊,準確新增 CNAME 記錄。針對每筆記錄,請執行下列操作:

    • 在「Name」或「Host」欄位中輸入主機詳細資料。
    • 在「點數」或「價值」欄位中輸入值。

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 替換為專案 ID。 Google Cloud

  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 金鑰。為提升安全性,建議您使用 Secret Manager 儲存 API 金鑰,而不是將金鑰放在 appengine-web.xml 檔案中。
  4. 執行下列指令來部署應用程式:

    mvn package appengine:deploy
    

測試應用程式

如果可以部署應用程式且沒有錯誤,即代表遷移作業成功。如要確認郵件服務是否正常運作,請按照下列步驟操作:

  1. 觸發應用程式中傳送電子郵件的部分。
  2. 檢查記錄檔瀏覽器,確認 API 呼叫或 SMTP 連線嘗試沒有發生錯誤。
  3. 登入第三方電子郵件服務供應商的帳戶 (例如 Mailgun、Mailjet、SendGrid),並查看活動動態消息、記錄或傳送狀態資訊主頁。測試電子郵件應會顯示在動態消息中,且遞送狀態標示為「已傳送」Processed、「已遞送」Delivered或類似狀態。

後續步驟