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

使用Python win32com调用Outlook Redemption的GetMailTips遇WinHttp错误

问题描述

使用Redemption官方GetMailTips基础示例代码连接云端O365 Exchange服务器时无法建立连接,核心问题为认证方式不兼容,报错包含多个401未授权错误及自动发现服务连接异常。

示例代码

import win32com.client
win32com.client.gencache.EnsureDispatch("Outlook.Application")
session = win32com.client.Dispatch("Redemption.RDOSession")
session.SkipAutodiscoverLookupInAD = True
session.Logon()    
adrentry = session.AddressBook.ResolveName("name@name.com")
mailtips = adrentry.GetMailTips()
#dir(mailtips)
print(mailtips.OutOfOfficeMessage)

报错信息

com_error: (-2147352567, '发生异常。', (0, 'Redemption.RDOMailTips', 'WinHttpReceiveResponse错误: ERROR_WINHTTP_TIMEOUT\r\nWinHttpSendRequest(eCentral.mail.onmicrosoft.com/autodiscover/autodiscover.xml)错误: ERROR_WINHTTP_NAME_NOT_RESOLVED\r\nWinHttpSendRequest(autodiscover.eCentral.mail.onmicrosoft.com/autodiscover/autodiscover.xml)错误: ERROR_WINHTTP_CANNOT_CONNECT\r\n来自https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml的HTTP错误401\r\n服务器响应:\r\n\r\nWinHttpQueryHeaders错误: ERROR_WINHTTP_HEADER_NOT_FOUND\r\n预期HTTP_STATUS_REDIRECT,收到403\r\nWinHttpSendRequest(eCentral.mail.onmicrosoft.com/autodiscover/autodiscover.xml)错误: ERROR_WINHTTP_NAME_NOT_RESOLVED\r\nWinHttpSendRequest(autodiscover.eCentral.mail.onmicrosoft.com/autodiscover/autodiscover.xml)错误: ERROR_WINHTTP_CANNOT_CONNECT\r\n来自https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml的HTTP错误401\r\n服务器响应:\r\n\r\n来自https://outlook.office365.com/autodiscover/autodiscover.xml的HTTP错误401\r\n服务器响应:\r\n\r\n来自https://outlook.office365.com/autodiscover/autodiscover.xml的HTTP错误401\r\n服务器响应:\r\n', None, 0, -2147418113), None)

解决方案

O365已废弃传统基本认证,原代码使用的RDOSession.Logon()默认认证方式无法通过验证,需改用OAuth认证连接,步骤如下:

  1. Azure AD应用注册配置

    • 在Azure门户注册应用,添加Exchange Online的Mail.Read等必要权限(按需调整),并获取管理员同意。
    • 记录应用的租户ID、客户端ID,以及客户端密钥(或证书指纹)。
  2. 修改代码实现OAuth登录
    替换原session.Logon()调用,使用LogonHostedExchangeMailbox方法传入OAuth凭据,示例代码:

    import win32com.client
    
    session = win32com.client.Dispatch("Redemption.RDOSession")
    session.SkipAutodiscoverLookupInAD = True
    
    # 替换为实际信息
    tenant_id = "你的租户ID"
    client_id = "你的客户端ID"
    client_secret = "你的客户端密钥"
    user_email = "你的邮箱地址"
    
    # OAuth认证登录
    session.LogonHostedExchangeMailbox(
        user_email,
        f"oauth2://{tenant_id}/{client_id}/{client_secret}"
    )
    
    adrentry = session.AddressBook.ResolveName("name@name.com")
    mailtips = adrentry.GetMailTips()
    print(mailtips.OutOfOfficeMessage)
    
  3. 关键注意事项

    • 确保Redemption版本为v5.21及以上(支持OAuth认证)。
    • 若使用证书替代客户端密钥,调整连接字符串为oauth2://{tenant_id}/{client_id}/cert://{证书指纹}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:41:27