跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Python Django怎么发邮件_配置EmailBackend SMTP服务器实现注册找回密码发信验证

SMTP配置必须写在settings.py中,且EMAIL_BACKEND、EMAIL_HOST、EMAIL_PORT三项缺一不可;需用环境变量管理EMAIL_HOST_PASSWORD等敏感信息,开发时推荐console backend或MailHog。 SMTP配置写在哪?settings.py里这三项不能少 Django发邮件不是调个函数就完事,核心是让
EMAIL_BACKEND
知道用谁发、怎么连。必须在
settings.py
里配齐三个关键项:
EMAIL_BACKEND
设为
'django.core.mail.backends.smtp.EmailBackend'
(开发时可临时用
'django.core.mail.backends.console.EmailBackend'
看日志)
EMAIL_HOST
填服务商地址,比如 Gmail 是
'smtp.gmail.com'
,腾讯企业邮箱是
'smtp.exmail.qq.com'
EMAIL_PORT
注意端口差异:Gmail 用
587
(TLS)或
465
(SSL),腾讯通常用
465
或
587
,别硬套 常见错误:把
EMAIL_HOST_USER
写成完整邮箱却忘了配
EMAIL_HOST_PASSWORD
;或者用了 App Password 却还填登录密码(Gmail 开了两步验证后必须用 App Password) send_mail()和EmailMessage()选哪个?简单通知用前者,带附件/HTML/多收件人用后者
send_mail()
够快够直,适合注册成功、密码重置链接这类单收件人纯文本通知:
from django.core.mail import send_mail send_mail( '欢迎注册', '点击链接激活账号:https://example.com/activate/xxx', 'noreply@example.com', ['user@domain.com'], fail_silently=False, )
但只要涉及以下任一情况,就得切到
EmailMessage
: 立即学习 “ Python免费学习笔记(深入) ”; 需要 HTML 内容(比如带样式的激活邮件) 要附文件(如PDF协议) 收件人超过一个且想用
Bcc
隐藏名单 需要自定义
Reply-To
或
Headers
EmailMessage
更灵活,但别漏掉
.send()
调用——它不自动发,写了不调等于白写。 Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 本地开发发不出?console backend和mailhog二选一 直接配真实 SMTP 在本地开发容易卡住,尤其 Gmail 会拦截非浏览器登录。两个务实方案: 开发阶段把
EMAIL_BACKEND
设为
'django.core.mail.backends.console.EmailBackend'
,邮件内容直接打到终端,不发也不连网络 想看真实渲染效果,装
mailhog
(轻量 SMTP 接收器),改
EMAIL_HOST
为
'localhost'
、
EMAIL_PORT
为
1025
,然后访问
https://www.php.cn/link/aa3e602dc876a6d7dccff51c07840900
查收 别在
DEBUG=True
时还死磕真实 SMTP——浪费时间,也容易触发服务商风控。 密码明文写settings.py?不行,用环境变量隔离敏感信息
EMAIL_HOST_PASSWORD
绝对不能硬编码进
settings.py
,尤其提交 Git 时极易泄露。正确做法: 用
os.environ.get()
读环境变量,例如:
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
启动服务前在 shell 里设:
export EMAIL_HOST_PASSWORD="your-app-password"
或用
python-decouple
、
django-environ
等库加载
.env
文件 顺带一提:
EMAIL_HOST_USER
也建议走环境变量——有些服务商(如阿里云邮件推送)的账号是子用户,和主账号分离,统一管理更安全。 发邮件看着简单,真正上线时卡住的几乎全是 SMTP 连接认证那几步,尤其是端口、加密方式、密码类型(普通密码 vs App Password)三者没对齐。调试时先 telnet 连一下
EMAIL_HOST
和
EMAIL_PORT
,确认通不通,比瞎猜快得多。

相关文章