You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目使用SMTP协议发送邮件时出现TimeoutError问题求助

解决Django使用Gmail SMTP发送邮件时的TimeoutError问题

我来帮你排查这个SMTP连接超时的问题,结合你用Gmail的场景,大概率是以下几个原因导致的,咱们逐个解决:

1. 替换为Gmail应用专用密码(最常见原因)

Gmail现在已经默认禁止使用普通密码登录第三方应用了,你必须先开启两步验证,然后生成一个应用专用密码来替代EMAIL_HOST_PASSWORD里的普通密码:

  • 登录你的Google账号,进入「安全」设置页面
  • 确认「两步验证」已经开启(如果没开,先按照提示完成开启)
  • 在「应用专用密码」板块,生成一个针对Django的专用密码(可以随便命名,比如“Django邮件”)
  • 把这个生成的16位密码复制到settings.py的EMAIL_HOST_PASSWORD中

注意:“不太安全的应用访问”选项现在Google已经逐步停用了,不要再依赖这个方案。

2. 排查网络与防火墙拦截

错误WinError 10060本质是连接超时,很可能是你的网络环境(比如公司内网、校园网)或者本地防火墙/杀毒软件拦截了SMTP请求:

  • 先在命令行测试端口连通性:执行 telnet smtp.gmail.com 587,如果提示无法连接,那就是网络端口被屏蔽了,需要联系网络管理员开放587端口,或者暂时关闭本地防火墙试试

3. 核对SMTP配置细节

再仔细检查一遍settings.py里的配置,确保没有拼写错误:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '你的完整邮箱地址(比如xxx@gmail.com)'
EMAIL_HOST_PASSWORD = '生成的应用专用密码'
  • 特别注意:EMAIL_HOST_USER必须是完整的邮箱地址,不能只写用户名部分

4. 尝试切换到SSL端口

如果587端口的TLS连接还是不行,可以试试改用465端口的SSL连接,修改配置如下:

EMAIL_PORT = 465
EMAIL_USE_SSL = True
EMAIL_USE_TLS = False

修改后记得重启Django服务器再测试发送邮件。

测试建议

你可以在Django shell里快速测试邮件发送,避免每次都运行整个项目:

  1. 打开命令行,进入项目根目录,执行 python manage.py shell
  2. 输入以下代码测试:
from django.core.mail import send_mail
send_mail(
    '测试邮件',
    '这是一封测试邮件',
    '你的邮箱地址',
    ['收件人邮箱地址'],
    fail_silently=False,
)

如果还有错误,新的报错信息会帮你更精准地定位问题。

内容的提问来源于stack exchange,提问作者Shahrear Abedin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:42:42