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

无法通过Python获取本地Outlook个人及共享收件箱账户的问题

解决Outlook共享邮箱无法通过Accounts集合获取的问题

问题原因

Outlook的mapi.Accounts集合仅包含用户直接登录的主邮箱账号,共享邮箱是附加到主账号下的共享存储,不属于这个集合,因此遍历Accounts无法获取到共享邮箱。

解决方案

方法1:遍历所有MAPI文件夹获取所有可见邮箱

直接遍历mapi.Folders可以列出Outlook中所有显示的邮箱(包括个人和共享邮箱):

import win32com.client

outlook = win32com.client.Dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")

# 遍历所有邮箱文件夹
for folder in mapi.Folders:
    print(f"邮箱名称: {folder.Name}")

方法2:通过主账号获取指定共享邮箱

如果已知共享邮箱的地址,可直接通过GetSharedDefaultFolder获取:

import win32com.client

outlook = win32com.client.Dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")

# 替换为目标共享邮箱的地址
shared_mailbox_address = "shared_mailbox@yourdomain.com"

try:
    # 创建收件人对象,获取共享邮箱的收件箱
    recipient = mapi.CreateRecipient(shared_mailbox_address)
    recipient.Resolve()  # 解析收件人
    shared_inbox = mapi.GetSharedDefaultFolder(recipient, 6)  # 6对应olFolderInbox常量
    print(f"获取到共享邮箱: {shared_inbox.Parent.Name}")
except Exception as e:
    print(f"获取共享邮箱失败: {str(e)}")

方法3:遍历Stores集合筛选共享存储

通过mapi.Stores集合可以筛选出所有共享邮箱存储:

import win32com.client

outlook = win32com.client.Dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")

# 遍历所有存储,筛选共享邮箱
for store in mapi.Stores:
    # IsDataFileStore为False表示非本地数据文件,ExchangeStoreType=2对应共享邮箱
    if not store.IsDataFileStore and store.ExchangeStoreType == 2:
        print(f"共享邮箱: {store.DisplayName}")

内容的提问来源于stack exchange,提问作者Suraj Kumar Nanda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:27:12