Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Отправка email. Не отправляется письмо с кириллицей

#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()

Комментариев нет:

Отправить комментарий