Django使用SMTP发送邮件出现SMTPServerDisconnected错误的解决求助
Django SMTP发送邮件出现SMTPServerDisconnected异常的原因与解决方法
常见成因
- SMTP配置参数冲突:当前配置混用了SSL端口(465)和TLS开关,协议不匹配导致服务器主动断开连接
- Google账号权限验证失败:普通密码无法通过Google的SMTP验证,开启两步验证的账号必须使用应用专用密码
- 网络/防火墙限制:服务器或本地环境的防火墙、服务商屏蔽了SMTP端口(465/587),连接建立后被强制关闭
- 账号信息错误:邮箱账号或密码填写错误,服务器验证不通过时会断开连接
解决步骤
1. 修正SMTP配置参数
根据协议选择正确的配置组合,二选一即可:
- SSL协议(端口465):
EMAIL_BACKEND = 'django_smtp_ssl.SSLEmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 465 EMAIL_USE_SSL = True # 替换原有的EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your_email@gmail.com' EMAIL_HOST_PASSWORD = '你的应用专用密码' DEFAULT_FROM_EMAIL = 'your_email@gmail.com' - TLS协议(端口587):
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your_email@gmail.com' EMAIL_HOST_PASSWORD = '你的应用专用密码' DEFAULT_FROM_EMAIL = 'your_email@gmail.com'
2. 配置Google账号的应用专用密码
若Google账号开启了两步验证,必须生成应用专用密码:
- 登录Google账号,进入「安全」设置页面
- 找到「应用密码」选项(需开启两步验证才能看到)
- 选择「邮件」作为应用类型,生成专用密码后替换配置中的
EMAIL_HOST_PASSWORD
3. 检查网络与端口可用性
用telnet命令测试端口连通性:
telnet smtp.gmail.com 465 # 或测试587端口 telnet smtp.gmail.com 587
若连接失败,说明端口被屏蔽,需联系服务器服务商解封,或切换到587端口尝试。
4. 测试邮件发送
使用Django Shell快速验证配置是否生效:
from django.core.mail import send_mail send_mail( '测试邮件', '这是测试内容', 'your_email@gmail.com', ['收件人邮箱'], fail_silently=False, )
根据返回的具体错误信息,进一步排查问题。
内容的提问来源于stack exchange,提问作者Gimbo
相关产品推荐
相关产品推荐

