问题
I have the following code which gets me the inbox of my shared folder, and all of the emails inside. This code works great and will print the subject of the last email.
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)
I can access other parent folders in foo@bar.com's mailbox (like Sent), but I can't get any subfolders of a folder within the inbox, or deeper than that. So if I want inbox\subfolder1, how do I access that? Using Outlook 2013 if that matters. My main goal is to do:
message.Move(inbox\subfolder1)
回答1:
Can't do that - Outlook caches shared default folders in the main OST file The subfolders are not cached. If the mailbox in question is added as a delegate store, you should be able to parse to the folder in question using Namespace.Folders
or Namespace.Stores
.
Otherwise you can use Redemption and its RDOSession.GetSharedDefaultFolder
- the folder will be opened in the online mode with all of its subfolders (RDOFolder.Folders
).
回答2:
Yeah its better to write it as the name of the folder instead of writing the folder numbers
Like my folder hierarchy is : Outlook_Mails > Inbox > Important
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)
回答3:
This is the code I'm using to do a similar task.
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
This finds the messages in the folder "All/Main Folder/Subfolder".
回答4:
Sir Tesla. Actually, I followed up your code pattern & change it as per my current project. Please find the below specimen code.
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>
Here I got to know, one thing. When we need to perform with some kind Function Mail Boxes then we just need to put the name under mapi.Folder[] then just go with the flow.
Sir Tesla your code pattern was helpful for me instead of using Folder number.
On another side, this technique helps me to append mail reading & taking action within a certain time frame.
回答5:
I took Jared Goguen's answer and modified it.
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
root_folder = inbox.Folders(6)
messages = root_folder.Items
Where inbox.Folders(6)
uses the index of my subfolder of interest to identify it. I was able to successfully iterate through the messages in the subfolder using this message.
来源:https://stackoverflow.com/questions/40849742/outlook-using-python-win32com-to-iterate-subfolders