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

Python脚本通过Outlook发送自动化邮件报连接超时错误如何解决

这类SMTP连接超时报错的通用解决方案
  • 第一步:修正服务配置认知误区
    你在账户设置中看到的443端口、https://outlook.office365.com/subdomain/Exchange.asmx 是Exchange Web Services(EWS)接口的地址,并非SMTP发信的服务配置。Office365官方标准SMTP发信配置为:
    • 服务器地址:smtp.office365.com
    • 端口:587(使用STARTTLS加密),禁止直接填写带https前缀的地址作为SMTP服务器域名
  • 第二步:排查网络连通性
    超时报错90%以上是网络层面不通导致,优先用命令行工具验证端口连通性:
    # Mac/Linux 下执行
    telnet smtp.office365.com 587
    # 或用nc验证
    nc -zv smtp.office365.com 587
    
    如果命令行也返回超时,依次检查:
    • 本地设备防火墙是否阻止了Python对外连接587/465端口
    • 所在公司内网是否限制了对外SMTP端口的访问(很多企业为了防控垃圾邮件会封公网SMTP端口)
    • 是否开启了代理/VPN,代理规则是否拦截了SMTP协议请求
  • 第三步:校验账号权限配置
    网络连通正常的前提下,检查账号配置:
    • 确认管理员已为该Office365账号开启SMTP AUTH权限
    • 若账号开启了多因素认证(MFA),不能直接用账号密码登录,需申请专用应用密码,或使用OAuth2方式完成认证
  • 第四步:修正代码逻辑
    标准Office365 SMTP发信参考代码如下:
    import smtplib, ssl
    from email.mime.text import MIMEText
    
    username = 'me@company.com'
    password = '你的密码/专用应用密码'
    smtp_server = "smtp.office365.com"
    port = 587
    sender_email = username
    receiver_email = "me@company.com"
    
    # 构造标准邮件格式,避免被服务器拒收
    message = MIMEText("Hi there! This message is sent from Python.")
    message['Subject'] = "测试邮件"
    message['From'] = sender_email
    message['To'] = receiver_email
    
    context = ssl.create_default_context()
    with smtplib.SMTP(smtp_server, port) as server:
        server.starttls(context=context)
        server.login(username, password)
        server.sendmail(sender_email, receiver_email, message.as_string())
    
  • 备选方案:绕开SMTP限制
    若内网确实封了SMTP端口,可使用exchangelib库调用EWS接口发信,走的就是常规443端口,不会被防火墙拦截,也符合Office365的接口规范。

额外说明:Mac系统本身完全支持SMTP协议,Outlook for Mac默认用IMAP是收信协议,发信仍默认调用SMTP服务,你的初始推测不成立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:36:03