Django怎么优雅发送邮件_Python配置SMTP后端实现异步通知

根本原因是Django默认同步连接SMTP且本地无邮件服务或端口未开放;需确认EMAIL_BACKEND为smtp后端、使用应用专用密码、适配465/587端口,并用线程实现异步发送。SMTP配置后邮件发不出去,send_mail 卡住或报 ConnectionRefusedError根本原因通常是 Django 默认用同步方式连 SMTP 服务器,而本地开发环境没装邮件服务,或生产环境防火墙/端口没放开。别急着换库,先确认连接通不通:python -c "import smtplib; s = smtplib.SMTP('smtp.gmail.com', 587); s.starttls(); print('OK')" ------ 手动测通路,绕过 DjangoDjango 的 EMAIL_BACKEND 必须设为 'django.core.mail.backends.smtp.EmailBackend',不是默认的 console 后端Gmail/Outlook 等需要开启「应用专用密码」或 OAuth2,普通账号密码大概率被拒,错误信息通常是 SMTPAuthenticationError阿里云、腾讯云 ECS 默认封 25 端口,得改用 465(SSL)或 587(TLS),对应配置 EMAIL_USE_SSL 或 EMAIL_USE_TLS,二者不能同时为 True想发邮件不阻塞视图响应,但又不想引入 Celery直接用线程最轻量,Django 自身不带异步邮件发送能力,send_mail 是纯同步调用。硬上 async/await 没用 ------ SMTP 库大多不支持 asyncio。用 threading.Thread 包一层最稳妥:from threading import Threaddef send_async_mail(*args, **kwargs): Thread(target=send_mail, args=args, kwargs=kwargs).start()注意:线程里不能依赖 request 对象或未序列化的上下文(比如 model 实例),得提前取好 str 或 dict 数据传进去别用 concurrent.futures.ThreadPoolExecutor 做简单通知------线程池适合复用,单次发信反而增加调度开销如果并发量真高(比如每秒几十封),线程还是不如 Celery + Redis,但那是另一个量级的问题了send_mail 和 EmailMessage 该选哪个send_mail 只能发纯文本,附件、HTML 内容、多收件人抄送都得换 EmailMessage。它不是"高级版",而是"必须用"的底层接口。send_mail 本质就是封装了 EmailMessage 的简单调用,参数少,适合密码重置这类单文本通知要嵌入图片、加附件、用模板渲染 HTML,必须用 EmailMessage:msg = EmailMessage( subject='订单完成', body='<h1>感谢下单</h1>', from_email='noreply@example.com', to='user@example.com')msg.content_subtype = 'html'msg.send()EmailMessage 的 to、cc、bcc 都是 list,别传字符串,否则发信失败但无提示模板里用 {% autoescape off %} 渲染 HTML 邮件时,确保内容可信,否则 XSS 风险直接进收件箱测试环境邮件全发到控制台,但上线后收不到因为 EMAIL_BACKEND 在不同环境配错了。Django 不会自动切换,靠你手动区分。 RedClaw 百度推出的手机端万能AI Agent助手

相关推荐
Oo92014 分钟前
Prompt工程核心与Python 字典
python·ai编程
意倾城15 分钟前
MySQL最左前缀匹配原则
数据库·mysql
暴躁小师兄数据学院18 分钟前
【AI大数据工程师特训笔记】第13讲:数据库性能手术刀
大数据·数据库·数据仓库·sql·postgresql
feeday24 分钟前
gpt4o 图像反推提示词
开发语言·人工智能·python
沈浩(种子思维作者)41 分钟前
没有错误,正确将一文不值
人工智能·python·算法·量子计算
smith成长之旅1 小时前
06 | Mem0 框架分析:为什么要从记忆中提取实体?——Entity Store 的设计动机与工程实现
人工智能·python
步十人1 小时前
【Redis】持久化机制
数据库·redis·缓存
smith成长之旅1 小时前
07 | Mem0 框架分析:三路信号融合——语义 + BM25 + Entity Boost 的混合检索
python·算法
荣码1 小时前
【Python知识详解】变量与数据类型:深入理解 Python 的数据世界
python
Quincy_Freak2 小时前
银河麒麟aarch64如何高效做数据分析?分享一款内网离线数据分析利器
大数据·数据库·数据挖掘·数据分析·aarch64