Python: Сохранение письма с русскими символами в файл TXT - PullRequest
0 голосов
/ 09 июля 2020

Я попытался сохранить письмо с символами Cyrilli c в файл TXT. Электронное письмо также создается автоматически. Вот полный код функции:

def send_and_archive_email(self):

        #connect to mailbox
        smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
        smtpObj.ehlo()
        smtpObj.starttls()
        login = input('Please, enter your login: ')
        password = input('Please, enter you password: ')
        smtpObj.login(login, password)

        header, body = self.draft_email() # return tuple of strings with Cyrillic characters
        msg = MIMEMultipart()
        msg['Subject'] = header
        msg['From'] = **********
        msg['To'] = *********
        msg.attach(MIMEText(body, 'plain', 'utf-8'))

        for name in self.cioms_names:
            with open(self.folder/name, "rb") as fil:
                part = MIMEApplication(
                    fil.read(),
                    Name=name
                )
            part['Content-Disposition'] = 'attachment; filename={}'.format(name)
            msg.attach(part)

        smtpObj.sendmail(msg['From'], msg['To'], msg.as_string())
        smtpObj.quit()

        #archive email and delivery confirmation
        connection = self.connect_to_email('"[Gmail]/Sent Mail"')
        search_criteria = **************    
        email_id = self.search_emails('SUBJECT', search_criteria, connection)
        typ, message = connection.fetch(email_id[0], '(RFC822)')
        raw = email.message_from_bytes(message[0][1])

        for part in raw.walk():

            if part.get_content_maintype() == 'multipart':
                continue


            if part.get_content_maintype() == 'text':
                filepath = self.folder/"test_save.txt"

                with codecs.open(filepath, 'wb', encoding='utf-8') as file:
                    body = u'' + part.get_payload()
                    file.write(body)

Текст сохраняется в файл в странном формате. Я знаю, что это проблема с кодировкой, и пробовал некоторые популярные, такие как utf-8, windows -1251, но проблема не решена. Мы будем очень благодарны за любые мысли или предложения.

...