Как сохранить файлы из входящей электронной почты с помощью 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)
))
В электронном письме нет "фактического пути к файлу из полезной нагрузки".
Только имя, уровень вложенности и несколько атрибутов вложения.