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 почтовый ящик (например, отправлен), но я не могу получить подпапки папки в папке "Входящие" или глубже. Итак, если я хочу inboxsubfolder1, как мне получить доступ к этому? С помощью Outlook 2013, Если это имеет значение. Моя главная цель-сделать:
message.Move(inboxsubfolder1)
5 ответов
не могу этого сделать - Outlook кэширует общие папки по умолчанию в основном OST-файле вложенные папки не кэшируются. Если рассматриваемый почтовый ящик добавлен в качестве хранилища делегатов, вы сможете проанализировать его с помощью Namespace.Folders
или Namespace.Stores
.
в противном случае вы можете использовать Искупление и RDOSession.GetSharedDefaultFolder
- папка будет открыта в режиме online со всеми вложенными папками (RDOFolder.Folders
).
да, лучше написать его как имя папки, а не писать номера папок
как моя иерархия папок: 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
это находит сообщения в папке "Все/папка/подпапка".
Сэр Тесла. На самом деле, я следил за вашим шаблоном кода и изменил его в соответствии с моим текущим проектом. Пожалуйста найдите внизу код образца.
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>
Я взял ответ Джареда Гогена и изменил его.
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
root_folder = inbox.Folders(6)
messages = root_folder.Items
здесь inbox.Folders(6)
использует индекс интересующей меня подпапки для его идентификации. Я смог успешно выполнить итерацию сообщений в подпапке, используя это сообщение.