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

Python使用SMTP发送Outlook邮件报SSL WRONG_VERSION_NUMBER错误如何解决

错误原因

你遇到的SSL: WRONG_VERSION_NUMBER报错是SMTP连接协议与端口不匹配导致的:Outlook的587端口不支持直接发起SSL握手,需要先建立普通TCP连接后通过STARTTLS命令升级为加密连接,你使用SMTP_SSL类直接对587端口发起SSL握手,就会触发版本不匹配错误。

排查步骤
  • 首先确认Outlook官方SMTP配置规则:直连SSL加密对应465端口,STARTTLS加密对应587端口,两者不能混配
  • 检查代码中使用的连接类与端口是否对应:SMTP_SSL类匹配465端口,普通SMTP类加starttls()方法匹配587端口
  • 若调整后仍报错,检查Outlook账号是否开启了第三方客户端SMTP权限,开启两步验证的账号需要使用专用应用密码登录,同时确认本地网络没有防火墙、代理拦截SMTP端口的出站请求
修复方案

有两种常用的正确配置方式,任选其一即可:

方案1:使用SMTP_SSL + 465端口

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg['From'] = '你的Outlook邮箱地址'
msg['Subject'] = '邮件主题'
msg['To'] = '收件人邮箱地址'
        
msg.set_content('邮件正文内容')

# 修改端口为465,适配SMTP_SSL协议
with smtplib.SMTP_SSL('smtp-mail.outlook.com', 465) as smtp:
    smtp.login('你的Outlook邮箱地址', '你的密码/应用专用密码')
    smtp.send_message(msg)
    print('Email sent!')

方案2:使用普通SMTP + STARTTLS + 587端口

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg['From'] = '你的Outlook邮箱地址'
msg['Subject'] = '邮件主题'
msg['To'] = '收件人邮箱地址'
        
msg.set_content('邮件正文内容')

# 使用普通SMTP类连接587端口,手动开启TLS加密
with smtplib.SMTP('smtp-mail.outlook.com', 587) as smtp:
    smtp.starttls()
    smtp.login('你的Outlook邮箱地址', '你的密码/应用专用密码')
    smtp.send_message(msg)
    print('Email sent!')
注意事项
  • 开启了两步验证的Outlook账号,不能直接用原账号密码登录SMTP服务,需要到微软账户安全中心生成应用专用密码后使用
  • 企业版Outlook的SMTP地址和端口可能和公共版不同,需要联系所在企业的IT部门确认正确配置
  • 部分网络运营商会封禁465、587端口的出站请求,若配置正确仍连接失败,可以切换网络测试

内容的提问来源于stack exchange,提问作者Echchama Nayak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:39:03