Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Python unicode e-mail sending
#coding: utf-8
from cStringIO import StringIO
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from email import Charset
from email.generator import Generator
import smtplib
# Example address data
from_address = [u'⌘Tomek Kopczuk⌘', 'tomek@example.com']
recipient = [u'Those #!@', 'contact@example.com']
subject = u'⌘Unicode test⌘'
# Example body
html = u'Unicode⏎\nTest⏎'
text = u'Unicode⏎\nTest⏎'
# Default encoding mode set to Quoted Printable. Acts globally!
Charset.add_charset('utf-8', Charset.QP, Charset.QP, 'utf-8')
# 'alternative’ MIME type – HTML and plain text bundled in one e-mail message
msg = MIMEMultipart('alternative')
msg['Subject'] = "%s" % Header(subject, 'utf-8')
# Only descriptive part of recipient and sender shall be encoded, not the email address
msg['From'] = "\"%s\" <%s>" % (Header(from_address[0], 'utf-8'), from_address[1])
msg['To'] = "\"%s\" <%s>" % (Header(recipient[0], 'utf-8'), recipient[1])
# Attach both parts
htmlpart = MIMEText(html, 'html', 'UTF-8')
textpart = MIMEText(text, 'plain', 'UTF-8')
msg.attach(htmlpart)
msg.attach(textpart)
# Create a generator and flatten message object to 'file’
str_io = StringIO()
g = Generator(str_io, False)
g.flatten(msg)
# str_io.getvalue() contains ready to sent message
# Optionally - send it – using python's smtplib
# or just use Django's
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login("", "")
s.sendmail("", recipient[1], str_io.getvalue())
@zroyer

This comment has been minimized.

Copy link

zroyer commented Oct 20, 2016

hey this really helped me today, thanks

@inghvar

This comment has been minimized.

Copy link

inghvar commented Jan 17, 2017

Yes, it's a useful thing

@ManishPrajapat

This comment has been minimized.

Copy link

ManishPrajapat commented Dec 15, 2018

Thanks ! Saved my time

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.