#python #python_3x #email #smtplib
Цель: Нужно отослать письмо на пошту. В письме есть кириллические символы. Проблема: скрипт работает с латинскими символами, но не работает з кириллицей Скрипт: import smtplib TEXT = "Кириллица \n"\ "Кириллица\n" TO = 'xxxxxx@gmail.com' SUBJECT = 'xxxx' # Gmail Sign In gmail_sender = 'xxxx@gmail.com' gmail_passwd = 'xxxxxx' server = smtplib.SMTP('smtp.gmail.com', 587) server.ehlo() server.starttls() server.login(gmail_sender, gmail_passwd) BODY = '\r\n'.join(['To: %s' % TO, 'From: %s' % gmail_sender, 'Subject: %s' % SUBJECT, '', TEXT]) try: server.sendmail(gmail_sender, [TO], BODY) print('email sent') except: print('error sending mail') server.quit() Ошибка: Traceback (most recent call last): File "C:/Users/babai/PycharmProjects/test/mail.py", line 47, inserver.sendmail(gmail_sender, [TO], BODY) File "C:\Program Files (x86)\Python36-32\lib\smtplib.py", line 854, in sendmail msg = _fix_eols(msg).encode('ascii') UnicodeEncodeError: 'ascii' codec can't encode characters in position 63-74: ordinal not in range(128) На сколько я понимаю проблема в кодировке. Тоесть модуль smtplib работает только с ANSII ??
Ответы
Ответ 1
Проблема решена с помощю MIMEText Решение найдено вот здесь https://ru.stackoverflow.com/a/369479/237582 Спасибо jfs # -*- coding: utf-8 -*- """Send email via smtp_host.""" import smtplib from email.mime.text import MIMEText from email.header import Header smtp_host = 'smtp.gmail.com' # yahoo login = "xxxxxx@gmail.com" password = "xxxxxxx" recipients_emails = "xxxxxx@gmail.com" msg = MIMEText('Спасибо', 'plain', 'utf-8') msg['Subject'] = Header('subject…', 'utf-8') msg['From'] = login msg['To'] = recipients_emails s = smtplib.SMTP(smtp_host, 587, timeout=10) s.set_debuglevel(1) try: s.starttls() s.login(login, password) s.sendmail(msg['From'], recipients_emails, msg.as_string()) finally: print(msg) s.quit()
Комментариев нет:
Отправить комментарий