Разбор составных писем в python и сохранение вложений

Я довольно новичок в python, и я пытаюсь разобрать электронную почту из gmail через imaplib и электронную почту python. Он работает довольно хорошо, но у меня возникли проблемы с вложениями электронной почты.

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

...imaplib connection and mailbox selection...

typ, msg_data = c.fetch(num, '(RFC822)')
        email_body = msg_data[0][1]
mail = email.message_from_string(email_body)
        for part in mail.walk():
            if part.get_content_type() == 'text/plain':
                body = body + 'n' + part.get_payload()
            else:
                continue

Это была моя первоначальная попытка просто взять открытый текст части электронной почты, но когда кто-то отправляет электронное письмо с текстовым вложением, содержимое текстового файла отображается для переменной "body" выше.

может ли кто-нибудь сказать мне, как я могу извлечь части открытого текста электронной почты, игнорируя вторичный HTML, который иногда присутствует, а также сохраняя все другие типы вложений файлов в виде файлов? Я извиняюсь, если это не имеет большого смысла. В случае необходимости я уточню этот вопрос.

1 ответов


Если вам просто нужно сохранить текст вложения body переменная с тем, что у вас есть, она должна быть такой простой:

mail = email.message_from_string(email_body)
    for part in mail.walk():
        c_type = part.get_content_type()
        c_disp = part.get('Content-Disposition')

        if c_type == 'text/plain' and c_disp == None:
            body = body + '\n' + part.get_payload()
        else:
            continue

тогда, если Content-Disposition указывает, что это вложение, вы должны иметь возможность использовать part.get_filename() и part.get_payload() для обработки файла. Я не знаю, Может ли что-то из этого меняться, но это в основном то, что я использовал в прошлом для взаимодействия с моим почтовым сервером.