Как сохранить файлы из входящей электронной почты с помощью imap_tools в ведро AWS S3

У меня есть сервер электронной почты, размещенный на AWS EC2. Я использую imap_tools для получения содержимого электронной почты. Когда я пытаюсь получить файл через полезную нагрузку, я получаю следующее возвращение;

att.payload # bytes: b'\xff\xd8\xff\xe0\'

Пожалуйста, как мне получить фактический путь к файлу из полезной нагрузки или байтов для сохранения на AWS S3 и иметь возможность прочитать его из моей таблицы?

Я могу прикрепить файл к письму и сохранить его на S3, но получить прикрепленный файл на почтовый адрес - моя проблема.

Это функция для чтения содержимого электронной почты с помощью imap_tools

def imap_inbox(self):
        unread_inbox = []
      
        for msg in self.mailbox.fetch():
            attachments = []
            for att in msg.attachments:
                attachments += [{
                    "filename": att.filename,         
                    "content_type": att.content_type,
                    "file": att.payload,
                }]
                
            msg_dict = {
                "subject": msg.subject.replace("***UNCHECKED*** ", ""),
                "from_mail": msg.from_,
                "to_mail": msg.to[0], 
                "message": msg.text, 
                "attachments": attachments,    
            }

            if 'RECENT' in msg.flags:
                unread_inbox += [msg_dict]

        return {
            "unread_inbox": unread_inbox,
        }

Это моя функция для mail_server_inbox

 def mail_server_inbox(self, request, *args, **kwargs):
        # imap authentication
        ad_imap = self.authenticate_imap()
        inbox = ad_imap.imap_inbox()
        unread_inbox = inbox.get("unread_inbox")

        for msg in unread_inbox:
            mail_instance = None
            file_name = None
            try:
                attachments = msg.pop("attachments", [])
                msg = { 
                    **msg, 
                }

                attachments = list(
                    map(
                        lambda att: {
                            **att, 
                            
                        },
                        attachments,
                    )
                )
                # saving the attachments in the Documents table
                Document.objects.bulk_create(list(
                    map(lambda att: Document(**att), attachments)
                ))

В электронном письме нет "фактического пути к файлу из полезной нагрузки".

Только имя, уровень вложенности и несколько атрибутов вложения.

Вернуться на верх