新手求助:如何用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
相关产品推荐
相关产品推荐

