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

新手求助:如何用Django+SendGrid发送noreply邮件?部署遇阻

Django 用 SendGrid 替代 SMTP 解决邮件发送问题

1. 安装依赖

先安装 SendGrid 的 Python 库:

pip install sendgrid

2. 修改 settings.py 配置

替换原有 SMTP 相关配置,改成 SendGrid 专属设置:

# 删除原有的EMAIL_HOST、EMAIL_PORT等SMTP配置,替换为:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'apikey'  # 固定值,无需修改
EMAIL_HOST_PASSWORD = '你的SendGrid API密钥'  # 从SendGrid后台生成并复制
DEFAULT_FROM_EMAIL = '已验证的发件邮箱'  # 必须是SendGrid后台验证过的邮箱/域名

3. 修正 views.py 发送逻辑

确保邮件发送代码参数正确,示例如下:

from django.core.mail import send_mail
from django.conf import settings
from django.http import HttpResponse

def send_email_view(request):
    subject = "邮件主题"
    message = "邮件内容"
    recipients = ["收件人邮箱@xxx.com"]
    
    send_mail(
        subject,
        message,
        settings.DEFAULT_FROM_EMAIL,
        recipients,
        fail_silently=False,  # 关闭静默模式,方便排查错误
    )
    return HttpResponse("邮件发送请求已提交")

必做验证步骤

  • 在 SendGrid 后台完成发件邮箱/域名验证,未验证的发件地址会导致邮件被拦截
  • 创建 API Key 时勾选「Mail Send」权限,确保密钥拥有发送邮件的权限
  • 检查部署环境网络,确认能访问 smtp.sendgrid.net 的 587 端口

报错排查方向

从报错截图来看,优先排查:

  • API 密钥是否填写正确,有无拼写错误
  • 发件邮箱是否已通过 SendGrid 验证
  • 部署服务器防火墙是否封禁了 587 端口

内容的提问来源于stack exchange,提问作者oneku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:48:21