如何配置Flask-Mail以异步发送HTML模板邮件至SMTP服务器?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1109个文字,预计阅读时间需要5分钟。
很多人在本地开发时直接使用SMTP服务器,如 smtp.gmail.com 和 587,但忘记了Gmail默认关闭了低安全性应用访问。结果 email.send() 调用后卡住30秒,随后抛出 TimeoutError 或 ConnectionRefusedError。实际上,更常见的情况是使用企业邮箱或云服务提供商的邮件推送服务,如腾讯云、阿里云等,它们提供了不同的端口和TLS/SSL要求。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 先用命令行验证 SMTP 连通性:
telnet smtp.exmail.qq.com 465(若失败,说明网络或防火墙阻断,不是代码问题) - 区分清楚:端口
465通常配MAIL_USE_SSL = True;端口587配MAIL_USE_TLS = True,二者不能混用 - 腾讯企业邮、网易企业邮等需开启“SMTP 服务”并生成专用密码,不能直接用登录密码
- 本地开发建议用
MailHog或fake-smtp-server拦截邮件,避免误发和配错触发风控
异步发送邮件时忘记用 copy_current_request_context 导致上下文丢失
Flask 的请求上下文(request、session、g)在线程或子进程中默认不可用。
本文共计1109个文字,预计阅读时间需要5分钟。
很多人在本地开发时直接使用SMTP服务器,如 smtp.gmail.com 和 587,但忘记了Gmail默认关闭了低安全性应用访问。结果 email.send() 调用后卡住30秒,随后抛出 TimeoutError 或 ConnectionRefusedError。实际上,更常见的情况是使用企业邮箱或云服务提供商的邮件推送服务,如腾讯云、阿里云等,它们提供了不同的端口和TLS/SSL要求。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 先用命令行验证 SMTP 连通性:
telnet smtp.exmail.qq.com 465(若失败,说明网络或防火墙阻断,不是代码问题) - 区分清楚:端口
465通常配MAIL_USE_SSL = True;端口587配MAIL_USE_TLS = True,二者不能混用 - 腾讯企业邮、网易企业邮等需开启“SMTP 服务”并生成专用密码,不能直接用登录密码
- 本地开发建议用
MailHog或fake-smtp-server拦截邮件,避免误发和配错触发风控
异步发送邮件时忘记用 copy_current_request_context 导致上下文丢失
Flask 的请求上下文(request、session、g)在线程或子进程中默认不可用。

