2016-11-28 181 views
2

我有以下代碼可以將我的共享文件夾的收件箱和裏面的所有電子郵件發送給我。此代碼很好,並會打印最後一封電子郵件的主題。使用python win32com展開迭代子文件夾的Outlook

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") 
recip = outlook.CreateRecipient("[email protected]") 
inbox = outlook.GetSharedDefaultFolder(recip, 6) 
messages = inbox.Items 
message = messages.GetLast() 
print (message.Subject) 

我可以訪問其他父文件夾中[email protected]'s郵箱(如發送),但我不能在收件箱中獲得一個文件夾的子文件夾,或比更深。所以如果我想要inbox \ subfolder1,我該如何訪問它?如果有問題,使用Outlook 2013。 我的主要目標是要做到:

message.Move(inbox\subfolder1) 

回答

3

不能這樣做 - Outlook緩存在主OST文件中共享默認文件夾子緩衝區不被緩存。如果問題郵箱作爲代理商店添加,您應該可以使用Namespace.FoldersNamespace.Stores解析相關文件夾。

否則,您可以使用Redemption及其RDOSessionGetSharedDefaultFolder - 該文件夾將以在線模式及其所有子文件夾(RDOFolderFolders)打開。

+0

好了。這很糟糕。感謝您的洞察力。不幸的是我受限於我可以使用的工具,所以我試圖找到一種只用Python來實現的方法。 – nico

3

這是我用做類似的任務的代碼。

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 

這會在文件夾「All/Main Folder/Subfolder」中找到消息。

+0

我喜歡這個想法,但你知道如何得到它的共享郵箱工作?我嘗試從我的初始代碼設置root_folder等於outlook.GetSharedDefaultFolder(recip,6),但沒有運氣。 – nico

+0

@nico隨着這種變化'root_folder'有一個'文件夾'屬性?看來這樣會將收件箱設置爲'root_folder',這樣子文件夾就可以通過'root_folder.Folders ['Subfolder']找到。如果沒有,我不知道,對不起。 –

+0

儘管'GetSharedDefaultFolder'應該返回一個'Folder',可以在這裏找到API:[Folder API](https://msdn.microsoft.com/en-us/library/office/ff863890.aspx)。 –

-1

我拿了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)使用我的利益,以確定它的子文件夾的索引。我能夠使用此消息成功地遍歷子文件夾中的消息。

2

呀它能夠更好地寫爲文件夾的名稱,而不是寫在文件夾編號

就像我的文件夾層次是: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) 
0

爵士特斯拉。 其實,我跟着你的代碼模式&更改爲我目前的項目。 請找到以下樣本代碼。

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 []然後就隨着流程走。

特斯拉先生代碼模式是對我有幫助的,而不是使用文件夾編號

在另一個方面,這種技術可以幫助我追加的郵件閱讀&採取一定的時間框架內行動。

+0

如果您有新問題,請點擊[Ask Question](問問題)(https://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 - [來自評論](/ review/low-quality-posts/18894815) – Shikkediel

+0

請不要添加「謝謝」作爲答案。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你就可以[提出問題和答案](https://stackoverflow.com/help/privileges/vote- )你發現有幫助。 - [來自評論](/ review/low-quality-posts/18894815) – WebDevBooster

+0

這不會提供問題的答案。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你將可以[對任何帖子發表評論](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提問者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [來自評論](/ review/low-quality-posts/18894815) – NightOwl888

相關問題