簡體   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