Outlook使用python win32com迭代子文件夹

新手上路,请多包涵

我有以下代码可以获取共享文件夹的收件箱以及其中的所有电子邮件。此代码效果很好,将打印最后一封电子邮件的主题。

 outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
recip = outlook.CreateRecipient("foo@bar.com")
inbox = outlook.GetSharedDefaultFolder(recip, 6)
messages = inbox.Items
message = messages.GetLast()
print (message.Subject)

我可以访问 foo@bar.com 邮箱中的其他父文件夹(如已发送),但我无法获取收件箱内或更深文件夹的任何子文件夹。那么,如果我想要 inbox\subfolder1,我该如何访问它?如果重要,请使用 Outlook 2013。我的主要目标是:

 message.Move(inbox\subfolder1)

原文由 nico 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 866
2 个回答

不能这样做 - Outlook 缓存主 OST 文件中的共享默认文件夹 不缓存子文件夹。如果有问题的邮箱被添加为委托存储,您应该能够使用 Namespace.FoldersNamespace.Stores 解析到有问题的文件夹。

否则你可以使用 Redemption (我是它的作者)和它的 RDOSessionGetSharedDefaultFolder - 该文件夹及其所有子文件夹( RDOFolder . Folders )将以在线模式打开。

原文由 Dmitry Streblechenko 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的,最好将其写为文件夹的名称而不是写文件夹编号

就像我的文件夹层次结构是:Outlook_Mails > 收件箱 > 重要

outlook = win32.com.client.Dispatch("Outlook.Application")
mapi = outlook.GetNamespace("MAPI")

your_folder = mapi.Folders['Outlook_Mails'].Folders['Inbox'].Folders['Important']
for message in your_folder.Items:
    print(message.Subject)

原文由 Sir Tesla 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题