Попытка прочитать вложения Outlook с помощью python

#python #outlook

Вопрос:

Я работаю над сценарием, который читает электронные письма из Outlook с помощью Python, я хотел знать, есть ли какой-либо способ прочитать вложения без их загрузки, например, открыть вложенный pdf-файл и записать его в фрейм данных.

Это мой код:

 import win32com.client
import os

mail ='email_name@gmail.com'
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

stores = outlook.Stores
for store in stores:
        if store.DisplayName == mail:
                inbox = store.GetDefaultFolder(6)
                messages = inbox.Items
                for attachment in messages[1].Attachments:
                        print(attachment)
 

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

1. Я не очень хорошо знаю, почему мое приветствие было удалено при публикации. Привет, Сообщество.

Ответ №1:

Объектная модель Outlook не предоставляет доступ к двоичным данным вложения. Лучшее, что вы можете сделать, это сохранить вложение как временный файл ( Attachment.SaveAsFile ), прочитать содержимое файла, удалить файл.

Однако на уровне MAPI (только на C или Delphi) доступ к вложениям возможен только в виде больших двоичных объектов или в виде IStream (или IStorage ) интерфейса; MAPI ничего не знает о файлах. Если использование выкупа является опцией, оно обеспечивает доступ к данным вложения через AsText / AsArray / EmbeddedMsg / OleStorage / AsStream свойства — см. https://www.dimastr.com/redemption/RDOAttachment.htm и https://www.dimastr.com/redemption/safe_Attachment.htm

Ответ №2:

любой способ прочитать вложения без их загрузки

Нет. Сначала вам нужно сохранить файл на диске. Затем вы можете открыть только что сохраненный файл на диске и обработать его в своем приложении.

 # Creating an object for the message.Attachments.
attachment = message.Attachments
# To check which item is selected among the attacments.
print (message.Attachments.Item(which_item))
# To iterate through email items using message.Attachments object.
for attachment in message.Attachments:
   # To save the perticular attachment at the desired location in your hard disk.
   attachment.SaveAsFile(os.path.join("D:ScriptAttachments",file_name))