從 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. 執行下列指令,將 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 金鑰。為提升安全性,建議您使用 Secret Manager 儲存 API 金鑰,而不是將金鑰放在 app.yaml 檔案中。
    • 如果未使用 send_mail_to_admins() 函式,請省略 APPENGINE_ADMIN_EMAIL_RECIPIENTS 設定。
  3. 執行下列指令來部署應用程式:

    gcloud app deploy
    

測試應用程式

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

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

後續步驟