#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))