Как вытащить вложенное изображение cid из входящего email

Есть код, который с помощью модуля email парсит входящее электронное письмо:

            if msg.is_multipart():
            for part in msg.walk():
                content_type = part.get_content_type()
                content_disposition = str(part.get('Content-Disposition'))
                content_encoding = str(part.get('Content-Transfer-Encoding'))
                # skip any text/plain (txt) attachments
                if content_type == 'text/plain' and 'attachment' not in content_disposition:
                    body = part.get_payload(decode=True)
                    break
        else:
            body = msg.get_payload(decode=True)

Как мне вытащить из тела письма вложенное изображение, и сохранить его в файл, если инфо о изображении только что-то вроде такого: [cid:[email protected]]?


Ответы (1 шт):

Автор решения: Zondrillo

Для того чтобы извлечь вложенное в тело письма изображение - необходимо "пройти" по частям составного письма:

    if some_msg.is_multipart():
        for part in some_msg.walk():
            content_type = part.get_content_type()
            if content_type == 'text/plain':
                body = part.get_payload(decode=True)
            """ Далее мы отфильтровываем картинку и можем записать её в файл """
            elif content_type == 'image/png' or content_type == 'image/jpg':
                img_data = part.get_payload(decode=True)
                """ Дальше надо создать файл в байтовом режиме для записи картинки """
                with open('path/to/some_file.png', 'wb') as image:
                    image.write(img_data)
→ Ссылка