Редактировать заголовок в .eml - PullRequest
0 голосов
/ 14 декабря 2018

Как краткое резюме, у меня есть несколько файлов '.eml' в каталоге.Мне нужно переслать эти электронные письма обратно на «email@example.com».

Проблема в том, что поле «От» в заголовке файла «.eml» содержит другой адрес электронной почты, который не соответствуетс'email@example.com'.

Я искал способ синтаксического анализа файла и обновления содержимого заголовка.

Сначала я использовал следующие модули:

  • eml.parser для анализа файла.
  • pyo365 для подключения к MSGraph API

Мне удалось отправить содержимое тела, но когда я попытался отправить вложения, мне пришлось декодировать из base64 и извлечь вложения в папке, а затем отправить все.Мне не нужно было изменять содержимое заголовка.

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

Также, поскольку ограничение размера файла вложения MSGraph составляет 4 МБ на запросы, я решил попробовать изменить:

  • smtplib для отправки электронного письма
  • Iпопытался mail-parser безуспешно обновить что-либо в контенте, поскольку обновленные значения не будут постоянными, например:

    mail = mailparser.parse_from_bytes (byte_mail) mail.from_ = [(«Мое имя», «email@example.com»)] print (mail.headers) # Это напечатало бы оригинальный заголовок

Я также пробовал с mail.update () и различнымиметод использования этого модуля без успеха.

Я нашел сообщение Python: Изменить значения в файле eml (заголовок электронной почты) , в котором предлагается использовать Parser, replace_header и as_string из email но я так и не смог заставить его работатья не могу позвонить replace_header и as_string :

from email.message import EmailMessage #contains as_string
from email.parser import HeaderParser
file = open(filename, 'r')
h = HeaderParser().parse(file)

#stuck here

Я знаю, что это, вероятно, не только один вопрос, но главная цель - отправить файлы eml обратнона конкретный адрес, от «mail@example.com».

1 Ответ

0 голосов
/ 17 декабря 2018

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

    from passlib.context import CryptContext
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.application import MIMEApplication
    from email.header import Header

    def send(self, dst):
    try:
        self.m = MIMEMultipart()
        self.m['From'] = self.client_addr
        self.m['To'] = dst
        # Must have Header() in python 3.x otherwise you get UnicodeError
        self.m['Subject'] = Header(self.get_subject(),  'utf-8')

        #Attach HTML body with the right encoding
        self.m.attach(MIMEText(self.get_body().encode('utf-8'), 'html', 'utf-8'))

        # Extract attachments to self.attachment_path
        self.extract_attachments(self.parsed_eml)

        server = smtplib.SMTP('smtp.office365.com', 587)
        server.ehlo()
        server.starttls()

        # Compare hash in config.json file
        if self.pwd_context.verify(self.client_plain_secret, self.client_secret):

            server.login(self.client_addr, self.client_plain_secret)
            server.sendmail(self.m['From'], self.m['To'], self.m.as_string())
            server.quit()
    except:
        print("An error occured trying to send the email.")
    finally:
        self.clean_attachments()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...