无法通过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
相关产品推荐
相关产品推荐

