#python #outlook #win32com
Вопрос:
Моя цель-выполнить поиск по всему почтовому ящику Outlook, чтобы найти/извлечь электронные письма с определенной темой.
Мой код выглядит следующим образом:
import win32com.client
import os
import re
path = 'C:/working path'
os.chdir(path)
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
user = outlook.Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress
inbox = outlook.Folders[user].Folders["Inbox"]
for i in inbox.Folders:
subfolders = i.Items
print(i.name)
for message in subfolders:
if message.subject.startswith('Report on X'):
print(message.subject)
title = str(message.subject)
message.SaveAs(os.getcwd() '//' title '.msg')
else:
print('skipped')
Моя проблема в том, что у меня есть сообщения на разных уровнях папок. Другими словами, у меня есть папки, подпапки, подпапки … и так далее.
С помощью приведенного выше кода я могу получить доступ только к папке «Входящие» и только к ее вложенным папкам. Поэтому, если электронное письмо, которое я ищу, находится во вложенной папке, я не могу его найти.
Есть ли способ выполнить поиск по всему почтовому ящику Outlook без указания имен папок, вложенных папок и т.д. ?
Ответ №1:
Я рекомендую вам взглянуть на это .Поле Папки. Прямо сейчас вы получаете доступ только к значению «Входящие» этого поля, но я бы предположил, что у него есть доступ ко всем другим папкам. Например:
print(inbox = outlook.Folders[user].Folders)
Если при этом отображается массив всех папок, то вы можете просто просмотреть каждую папку в этом массиве.
for i in outlook.Folders[user].Folders.Folders:
subfolders = i.Items
print(i.name)
for message in subfolders:
if message.subject.startswith('Report on X'):
print(message.subject)
title = str(message.subject)
message.SaveAs(os.getcwd() '//' title '.msg')
else:
print('skipped')