#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, in
server.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()
Комментариев нет:
Отправить комментарий