I\'m writing a simple smtp-sender with authentification. Here\'s my code
SMTPserver, sender, destination = \'smtp.googlemail.com\', \'user@gmail.com\', [
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def contains_non_ascii_characters(str):
return not all(ord(c) < 128 for c in str)
def add_header(message, header_name, header_value):
if contains_non_ascii_characters(header_value):
h = Header(header_value, 'utf-8')
message[header_name] = h
else:
message[header_name] = header_value
return message
............
msg = MIMEMultipart('alternative')
msg = add_header(msg, 'Subject', subject)
if contains_non_ascii_characters(html):
html_text = MIMEText(html.encode('utf-8'), 'html','utf-8')
else:
html_text = MIMEText(html, 'html')
if(contains_non_ascii_characters(plain)):
plain_text = MIMEText(plain.encode('utf-8'),'plain','utf-8')
else:
plain_text = MIMEText(plain,'plain')
msg.attach(plain_text)
msg.attach(html_text)
This should give you your proper encoding for both text and headers regardless of whether your text contains non-ASCII characters or not. It also means you won't automatically use base64 encoding unnecessarily.
You should encode your message-text with UTF-8
msg = MIMEText(content.encode('utf-8'), text_subtype).
More here: http://radix.twistedmatrix.com/2010/07/how-to-send-good-unicode-email-with.html
You may have to use SMTP header to achieve sending different charsets, try adding this -
msg['Content-Type'] = "text/html; charset=us-ascii"
( Change the charset according to your need )