You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中使用SMTP发送邮件遭遇谷歌新规则限制的问题求助

解决Django中谷歌SMTP邮件发送失效的方案(适配百万级邮件量)

我完全理解你的困扰——之前稳定运行的SMTP邮件功能突然失效,还要支撑每学期超百万封的发送量,换第三方服务不仅有迁移成本,还可能增加额外开支。下面是针对谷歌新规则的适配方案,专门贴合大规模邮件发送的场景:

1. 快速修复:启用两步验证并使用App Password

如果你的账户是Google Workspace(原G Suite)(这是支撑百万级发送的前提,免费Gmail账户单日限额仅500封,完全无法满足需求),可以先通过这个方法快速恢复功能:

  • 登录你的谷歌账户安全设置,开启两步验证(2FA)
  • 找到「App Passwords」选项(仅开启2FA后可见),创建一个专门用于Django邮件发送的密码(比如命名为"Django Mail Sender")
  • 在Django的settings.py中替换原邮件密码:
    EMAIL_HOST_PASSWORD = "你生成的App Password"
    
    Workspace账户默认单日发送限额为10,000封/用户,若你的需求更高,可联系谷歌申请提升额度(合规邮件通常会获批)。

2. 长期稳定方案:配置OAuth2认证

谷歌更推荐OAuth2作为大规模邮件发送的认证方式,比App Password更安全且不易触发限制。你可以这样配置Django:

  • 第一步:在Google Cloud Console创建项目并启用Gmail API
    进入Google Cloud Console,新建项目后搜索并启用「Gmail API」。
  • 第二步:创建OAuth2凭证
    若你是Workspace管理员,推荐创建服务账号并开启「域范围授权」,这样可以用服务账号代表域内用户批量发送邮件;个人Workspace账户可创建「OAuth2客户端ID」(类型选桌面/WEB应用)。
  • 第三步:配置Django邮件后端
    可以使用第三方库django-smtp-oauth2简化配置,或手动修改参数:
    EMAIL_BACKEND = 'django_smtp_oauth2.EmailBackend'
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True
    EMAIL_HOST_USER = '你的Workspace邮箱地址'
    OAUTH2_CLIENT_ID = '你的客户端ID'
    OAUTH2_CLIENT_SECRET = '你的客户端密钥'
    OAUTH2_REFRESH_TOKEN = '你的刷新令牌'
    
    刷新令牌可通过OAuth2授权流程获取,Workspace服务账号可生成长期有效令牌,无需频繁刷新。

3. 优化发送策略避免触发限制

即使是Workspace账户,也需要注意发送规则,避免被标记为垃圾邮件或触发限额:

  • 使用Django内置的send_mass_mail()代替循环发送单封邮件,减少SMTP连接次数,提升发送效率。
  • 分批次发送:比如每小时发送500-1000封,避免短时间内集中发送触发阈值。
  • 配置DNS验证:添加SPF、DKIM、DMARC记录,这是确保批量邮件不被拒收的核心前提。
  • 邮件内容合规:添加清晰的退订链接,主题和内容避免垃圾邮件关键词,确保收件人是主动订阅用户。

内容的提问来源于stack exchange,提问作者Thierno Amadou Sow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:12:29