Как установить кодировку в электронной почте с помощью smtplib в Python 2.7?

Я пишу простой smtp -отправитель с аутентификацией.Вот мой код

    SMTPserver, sender, destination = 'smtp.googlemail.com', 'user@gmail.com', ['reciever@gmail.com']
    USERNAME, PASSWORD = "user", "password"

    # typical values for text_subtype are plain, html, xml
    text_subtype = 'plain'


    content="""
    Hello, world!
    """

    subject="Message Subject"

    from smtplib import SMTP_SSL as SMTP       # this invokes the secure SMTP protocol (port 465, uses SSL)
    # from smtplib import SMTP                  # use this for standard SMTP protocol   (port 25, no encryption)
    from email.MIMEText import MIMEText

    try:
        msg = MIMEText(content, text_subtype)
        msg['Subject']=       subject
        msg['From']   = sender # some SMTP servers will do this automatically, not all

        conn = SMTP(SMTPserver)
        conn.set_debuglevel(False)
        conn.login(USERNAME, PASSWORD)
        try:
            conn.sendmail(sender, destination, msg.as_string())
        finally:
            conn.close()

    except Exception, exc:
        sys.exit( "mail failed; %s" % str(exc) ) # give a error message

Он работает отлично, пока я не попытаюсь отправить не -символы ascii (русская кириллица ).Как я должен определить кодировку в сообщении, чтобы сделать это правильно показывает?Спасибо заранее!

UPD.Я изменил свой код:

text_subtype = 'text'
content="<p>Текст письма</p>"
msg = MIMEText(content, text_subtype)
msg['From']=sender # some SMTP servers will do this automatically, not all
msg['MIME-Version']="1.0"
msg['Subject']="=?UTF-8?Q?Тема письма?="
msg['Content-Type'] = "text/html; charset=utf-8"
msg['Content-Transfer-Encoding'] = "quoted-printable"
…
conn.sendmail(sender, destination, str(msg))

Итак, сначала я указываю текст _subtype = 'text', а затем в заголовке я помещаю msg[ 'Content -Type'] = "text/html; charset=utf -8-дюймовая строка. Это правильно?

ОБНОВЛЕНИЕ Наконец, я решил свою проблему с сообщением Вы должны написать что-то вроде msg = MIMEText (content.encode ('utf -8' ), 'plain', 'UTF -8')

17
задан f1nn 24 April 2012 в 12:28
поделиться