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