Кодировка при отправке сообщения

Рейтинг: 4Ответов: 2Опубликовано: 21.10.2014

Дмитрий Деревянкин. Спасибо большое за пример,легко у себя его реализовал. Но есть проблема. Если msg = MIMEText('') содержит только латинские - то все нормально.Но вот если это будет кириллица,то возникают проблемы с кодировкой: a = "бляха" part = MIMEText(a)

Результат: бляха

При этом тема письма нормально отображается как латиницей,так и кириллицей. Заранее благодарю за ответ на глупый нубский вопрос.

Ответы

▲ 7Принят

Вот пример как в тело и заголовок e-mail добавить произвольный Юникод текст:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Send email via smtp_host."""
import smtplib
from email.mime.text import MIMEText
from email.header    import Header

####smtp_host = 'smtp.live.com'        # microsoft
####smtp_host = 'smtp.gmail.com'       # google
####smtp_host = 'smtp.mail.yahoo.com'  # yahoo
smtp_host = 'smtp.yandex.ru'           # yandex    
login, password = ...
recipients_emails = [login]

msg = MIMEText('body…', 'plain', 'utf-8')
msg['Subject'] = Header('subject…', 'utf-8')
msg['From'] = login
msg['To'] = ", ".join(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:
    s.quit()
▲ 2
import smtplib
from email.mime.text import MIMEText

# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::

MAIL_SERVER = 'smtp.gmail.com'
MAIL_PORT = 465

print('Авторизация:')

MAIL_USERNAME = input('логин: ')
MAIL_PASSWORD = input('пароль: ')

FROM = MAIL_USERNAME
TO = 'example@gmail.com'

# теперь можно использовать кириллицу 
msg = input('message: ')
msg = MIMEText('\n {}'.format(msg).encode('utf-8'), _charset='utf-8')

smtpObj = smtplib.SMTP_SSL(MAIL_SERVER, MAIL_PORT)
smtpObj.ehlo()
smtpObj.login(MAIL_USERNAME, MAIL_PASSWORD)

smtpObj.sendmail(FROM, TO, 
        'Subject: xxx-pythman-xxx. \n{}'.format(msg))
smtpObj.quit()