为了提高邮件安全性并确保可靠地发送大量邮件,请从旧版 Mail API 迁移到使用简单邮件传输协议 (SMTP) 的标准第三方邮件服务提供商服务,例如 SendGrid、Mailgun 或 Mailjet。
本指南介绍了将出站邮件服务从 Mail API 迁移到基于 SMTP 的邮件服务的流程。您可以按照这些说明迁移到任何基于 SMTP 的第三方邮件服务提供商,也可以使用其他受支持的运行时。本指南未提供有关迁移使用第三方替代方案的入站消息传递的步骤。
与旧版 App Engine Mail API 相比,SMTP 标准具有以下优势:
基于 SMTP 的服务可降低邮件被标记为垃圾邮件的可能性,从而提高邮件递送率。
对于基于 SMTP 的服务,您可以访问有关邮件打开、点击和退回的详细分析报告。这些报告可提供有关用户如何与您的邮件互动的有用信息。
您可以完全控制发件人声誉和邮件身份验证。
与旧版 Mail API 相比,每日发信上限更高,并且可以使用 A/B 测试、细分和模板等高级功能。
迁移过程概览
迁移过程包括以下步骤:
- 设置基于 SMTP 的邮件服务,以获取您的 SMTP 凭证。
- 验证发件人身份,以通过网域或邮箱进行身份验证。
- 使用 SMTP 凭证和发送方法配置源文件,然后部署应用。
- 测试应用,以检查邮件功能。
设置基于 SMTP 的邮件服务
在采用 SMTP 的标准第三方邮件服务提供商(例如 SendGrid、Mailgun 或 Mailjet)处设置账号,然后从所选提供商处检索以下信息:
SMTP 主机:用于发送邮件的 SMTP 服务器地址。例如
smtp.sendgrid.net或example.mailjet.com。端口:连接的端口号。例如,
587用于 TLS 加密。用户名:您账号的 SMTP 登录用户名。
密码或 API 密钥:您的账号密码或 API 密钥,用作 SMTP 连接的密码。对于某些提供商(例如 SendGrid),用户名是固定值(例如
apikey),而 API 密钥用作密码。
验证发件人身份
为防范垃圾邮件,所有邮件服务都要求您验证自己是否是您用来发送邮件的邮箱或网域的所有者。此步骤通常涉及向域名托管服务商的 DNS 管理页面添加特定的 DNS 详细信息,例如 CNAME 记录。
请按照提供商的说明验证发件人身份,然后再继续进行应用配置。
如需将 DNS 记录添加到您的域名托管服务商,请按照以下步骤操作:
- 登录您的 DNS 提供商服务。
- 前往您网域的 DNS 管理页面。
完全按照邮件服务提供商提供的 CNAME 记录添加。对于每条记录,请执行以下操作:
- 在名称或主机字段中,输入主机详细信息。
- 在积分或值字段中,输入相应值。
DNS 更改可能需要几小时才能生效。如果验证失败,请等待一段时间,然后重试。
配置源文件
如需添加 SMTP 功能,请按照以下步骤操作:
运行以下命令,以将 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在
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.net或example.mailjet.com。 - SMTP_USER:您账号的 SMTP 登录用户名。例如
apiKey。 - SMTP_PASSWORD:从第三方邮件服务提供商处获取的密码或 API 密钥。为了提高安全性,我们建议您使用 Secret Manager 存储 API 密钥,而不是将其放在
app.yaml文件中。 - 如果您不使用
send_mail_to_admins()函数,请省略APPENGINE_ADMIN_EMAIL_RECIPIENTS设置。
运行以下命令以部署应用:
gcloud app deploy
测试您的应用
如果您能够部署应用并且没有出现错误,则迁移成功。如需验证您的邮件服务是否正常运行,请按照以下步骤操作:
- 触发应用中发送邮件的部分。
- 检查 Logs Explorer,以确保没有与 API 调用或 SMTP 连接尝试相关的错误。
- 登录您的第三方邮件服务提供商的账号(例如,Mailgun、Mailjet、SendGrid),并检查其活动动态、日志或递送信息中心。您的测试邮件应显示在 Feed 中,且递送状态标记为
Processed、Delivered或类似内容。