Как получить вложение из прикрепленного сообщения?Python

Программы на Python
Ответить
Anonymous
 Как получить вложение из прикрепленного сообщения?

Сообщение Anonymous »

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

Код: Выделить всё

from O365 import Account, Message
import O365
import uuid

class Mail:
def __init__(self):
self.credentials = ('xxx', 'xxx')
self.account = Account(self.credentials, auth_flow_type='credentials', tenant_id='xxx')
if self.account.authenticate():
print('Authenticated!')

self.mailbox = self.account.mailbox(resource='ais@bmodesto.com')
#self.root_folder = my_drive.get_root_folder()
self.inbox          = self.mailbox.get_folder(folder_name='Afgehandeld')
self.afgehandeld    = self.mailbox.get_folder(folder_name='Afgehandeld2')

def GetAttachmentFromMessage( self, message ):
print('getting attachment from message')
item = None

if message.has_attachments:
message.attachments.download_attachments()

attachments =  message.attachments

if 'Original Message Attached' in message.body:
print('LET OP, message is bijlage!')

for item in attachments:
filename = str(uuid.uuid4())
api = item.to_api_data()
print(api)

# this doesnt work
item.save('mail/',filename)

# This doesnt work as its an attachment and not a message
#self.GetAttachmentFromMessage(item)

for item in attachments:
#filename = str(uuid.uuid4())
#filename = item.attachment_name()
item.save('bvg/',)

return item

def ListMessagesFromFolder(self, folder):
messageList = self.inbox.get_messages()

return messageList

def MoveMessage(self, message, folder):
message.move(folder)

if __name__ == "__main__":
mail = Mail()

messages    = mail.ListMessagesFromFolder('inbox')

for message in messages:
#print(message)
data = mail.GetAttachmentFromMessage(message)

Проблема:
Если вложение представляет собой сообщение, а не файл, это проблема. Не только потому, что тогда вложение не сохраняется. Но также у меня нет возможности перебирать вложения, чтобы добраться до вложения.

Код: Выделить всё

            if 'Original Message Attached' in message.body:
print('LET OP, message is bijlage!')
Это помогает определить, является ли вложение сообщением (похоже, это спам-фильтр), поэтому, когда текст там, очевидно, сообщение прикрепляется и пересылается.
пробовал:

Код: Выделить всё

            item.attachments.download_attachments()

attachments =  item.attachments
Это не работает, поскольку элемент имеет тип Base Attachment, у которого нет этих методов.
Также пробовал:

Код: Выделить всё

mail.GetAttachment(attachment.id)
Очевидно, что это не работает, поскольку вы можете получить сообщение по идентификатору (но не таким способом), но у объекта вложения также нет элемента, который дает идентификатор.
Я застрял, не могу заставить спам-фильтр не пересылать вложение, хотя я все еще пытаюсь. С другой стороны, если отправляющая сторона сделает это, было бы здорово, если бы программа все еще работала.
Я бы предпочел изменить программу, чтобы она могла перебирать вложения, даже если вложение сообщение, которое также имеет вложение.
Вопрос:
Есть ли в пакете O365 способ получить вложение из сообщения, если сообщение прикреплено к сообщению? Или мне нужно перейти на что-то другое?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ed-message
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»