繁体   English   中英

Outlook 使用 python win32com 迭代子文件夹

[英]Outlook using python win32com to iterate subfolders

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

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 邮箱中的其他父文件夹(如已发送),但我无法在收件箱中获取文件夹的任何子文件夹,或更深。 因此,如果我想要收件箱\\子文件夹 1,我该如何访问它? 如果这很重要,请使用 Outlook 2013。 我的主要目标是:

message.Move(inbox\subfolder1)

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

就像我的文件夹层次结构是: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)

这是我用来执行类似任务的代码。

outlook = win32com.client.Dispatch("Outlook.Application")
namespace = outlook.GetNamespace("MAPI")
root_folder = namespace.Folders.Item(1)
subfolder = root_folder.Folders['All'].Folders['Main Folder'].Folders['Subfolder']
messages = subfolder.Items

这将在文件夹“全部/主文件夹/子文件夹”中找到消息。

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

否则,您可以使用Redemption及其RDOSession GetSharedDefaultFolder - 该文件夹将以其所有子文件夹 ( RDOFolder . Folders ) 在联机模式下打开。

特斯拉先生 实际上,我跟进了您的代码模式并根据我当前的项目对其进行了更改。 请找到以下样本代码。

import win32com.client
outlook = win32com.client.Dispatch("Outlook.application")
mapi = outlook.GetNamespace("MAPI")
FirstFMB = mapi.Folders['FirstFMB'].Folders['Inbox']
SecondFMB = mapi.Folders['SecondFMB'].Folders['Another_folder']

<Hence other loops & operations as per requirement>

在这里,我明白了一件事。 当我们需要使用某种功能邮箱执行时,我们只需将名称放在mapi.Folder[] 下,然后顺其自然。

特斯拉爵士,您的代码模式对我很有帮助,而不是使用Folder number

另一方面,这种技术可以帮助我在特定时间范围内附加邮件阅读和采取行动。

def processfolder(folder):

    ignoredfolders = []
    
    if not folder.Name in ignoredfolders:
        print("processing", folder.Name)
        count=0
        for mail in folder.Items:
               savemsg(mail)
               count += 1

        print(count, "Mails in folder")
        for fld in folder.Folders:
            processfolder(fld)

我接受了 Jared Goguen 的回答并对其进行了修改。

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
root_folder = inbox.Folders(6)
messages = root_folder.Items

其中inbox.Folders(6)使用我感兴趣的子文件夹的索引来识别它。 我能够使用此消息成功遍历子文件夹中的消息。

import win32com.client as win32

# new outlook object
outlook = win32.Dispatch("Outlook.Application")

# get user namespace *Important when reading email*
namespace = outlook.GetNamespace("MAPI")

# Default inbox folder either Folders.Item(1/2)
root_folder = namespace.Folders.Item(2)

# Use this function to display subfolders inside the current folder

def menu(outlookFolderItem):
    for i in range(0,20):
        try:
            print(i,outlookFolderItem.Folders(i).Name)
        except:
            pass

# example
menu(root_folder)

# navigate into the subfile by

sub_folder = root_folder.Folders(2).Folders(14)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM