Загрузка сообщений электронной почты Outlook с использованием Python из других учетных записей

#python #outlook

#python #outlook

Вопрос:

У меня есть 2 учетные записи в Outlook. Я хочу загрузить все письма со 2-й учетной записи (не моей основной учетной записи) из папки «Входящие».

Я написал код, который может загружать все входящие письма из моей основной учетной записи. Этот код работает нормально и сохраняет все письма в локальную папку email_folder Код выглядит следующим образом:

 from win32com.client import Dispatch
import os
import re
os.chdir("D:\email_folder")

outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(1)
messages = inbox.items
for message in messages:
    message = messages.GetNext()
    name = str(message.subject)
    name = re.sub('[^A-Za-z0-9] ', '', name) '.msg'    
    message.SaveAs(os.getcwd() '//' name)
  

Но проблема в том, что когда я пытаюсь загрузить электронные письма со 2-й учетной записи, это не работает. Я проверил, что номер дополнительной учетной записи равен 3, а вложенная папка «Входящие» равна 13.

Я использовал следующую функцию, чтобы найти ее.

 import win32com.client as win32
outlook = win32.Dispatch("Outlook.Application")
namespace = outlook.GetNamespace("MAPI")
root_folder = namespace.Folders.Item(3)
def menu(outlookFolderItem):
    for i in range(0,20):
        try:
            print(i,outlookFolderItem.Folders(i).Name)
        except:
            pass

# example
menu(root_folder)
  

Теперь я хочу загрузить электронные письма из дополнительной учетной записи из папки «Входящие». Я написал следующий код, который не работает. Код выглядит следующим образом:

 from win32com.client import Dispatch
import os
import re
os.chdir("D:\email_folder")

from win32com.client import Dispatch
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
sub_folder = outlook.Folders(3).Folders(13)
messages = sub_folder.items
for message in messages:
    message = messages.GetNext()
    name = str(message.subject)   
    message.SaveAs(os.getcwd() '//' name)
  

Пожалуйста, помогите мне. Спасибо

Ответ №1:

Никогда не вводите жесткие индексы папок. Если вам нужна папка по умолчанию (например, папка «Входящие») из другого хранилища, сначала откройте это хранилище (используя Namespace.Stores коллекцию), затем используйте Store.GetDefaultFolder вместо Namespace.GetDefaultFolder .

Комментарии:

1. Спасибо, Дмитрий. Не могли бы вы, пожалуйста, помочь мне с последним; Я хочу добавить номер итерации в название писем при его сохранении (в настоящее время имена совпадают). Она должна выглядеть как информация о клиенте 1, информация о клиенте 2, например. Я пытался использовать функцию enumerate, но не смог заставить ее работать. Заранее спасибо.

2. Это другой вопрос. Пожалуйста, опубликуйте его отдельно и отметьте это как ответ, если ответ сработал для вас.