Kwissle

My real-time quiz battle game Kwissle.com

Crosstips.org

My fun Crossword solver project. Crosstips.org & Krysstips.se

Kung Fu

Fujian White Crane Kung Fu

Photos

Photoalbum, both old and new.

Twitter

Follow me on Twitter

Contact me

My contact details and how to contact me.

 

KungFuPeople.com
Do you train Kung Fu?
Or know someone who does?
Then check out KungFuPeople.com


Mobile version of this page Mobile version of this page


 
Zope

Sending HTML emails in Zope


26th of October 2006

Here are a few lessons learnt when sending HTML emails in Zope with unicode data. I'm still a beginner with this stuff and still probably have a lot to learn. What I've achived now works but might break with different encodings or on different systems so don't assume that these patterns will work in your setup.

To the send the email I'm using the default MailHost that comes with Zope 2.8.5. I call it's send() passing the subject line a second time because the subject line is already in the body string.

The most valuable piece of magic to learn and remember from this is that when you construct the multi-part message you have to attach the plain text before the html text. Thank you Lukasz Lakomy for that tip!

Here's the code that constructs the message and send it:

 # -*- coding: iso-8859-1 -*-
 e_subject = u'Provsprängning'
 e_from = u'some@spammer.com'
 e_to = u'some@receiver.com'
 body_html = u'<html>provsprängningen <em>av</em> kärnvapen</html>'
 body_plain = u'provsprängningen *av* kärnvapen'

 mime_msg = MIMEMultipart('related')
 mime_msg['Subject'] = e_subject
 mime_msg['From'] = e_from
 mime_msg['To'] = e_to
 mime_msg.preamble = 'This is a multi-part message in MIME format.'

 # Encapsulate the plain and HTML versions of the message body 
 # in an 'alternative' part, so message agents can decide 
 # which they want to display.
 msgAlternative = MIMEMultipart('alternative')
 mime_msg.attach(msgAlternative)

 # plain part
 msg_txt = MIMEText(body,  _charset='iso-8859-1')
 msgAlternative.attach(msg_txt)

 # html part
 msg_txt = MIMEText(rendered_html, _subtype='html', 
                    _charset='iso-8859-1')
 msgAlternative.attach(msg_txt)

 self.MailHost.send(mime_msg.as_string())



Comment

Lukasz - 15th December 2006  [«« Reply to this]
You welcome PeterBe :D
minskmaz - 26th May 2007  [«« Reply to this]
#working version as external method
# -*- coding: iso-8859-1 -*-

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

def htmlMailer(self):
e_subject = u'Sent to you through plone'
e_from = u'some@spammer.com'
e_to = u'some@receiver.com'
body_html = """<html>provsprängningen <em>av</em> kärnvapen</html>"""
body_plain = u'provsprängningen *av* kärnvapen'

mime_msg = MIMEMultipart('related')
mime_msg['Subject'] = e_subject
mime_msg['From'] = e_from
mime_msg['To'] = e_to
mime_msg.preamble = 'This is a multi-part message in MIME format.'

# Encapsulate the plain and HTML versions of the message body
# in an 'alternative' part, so message agents can decide
# which they want to display.
msgAlternative = MIMEMultipart('alternative')
mime_msg.attach(msgAlternative)

# plain part
msg_txt = MIMEText(body_plain, _charset='iso-8859-1')
msgAlternative.attach(msg_txt)

# html part
msg_txt = MIMEText(body_html, _subtype='html',
_charset='iso-8859-1')
msgAlternative.attach(msg_txt)

self.MailHost.send(mime_msg.as_string())
imran - 4th December 2008  [«« Reply to this]
as_string() saved my life! Thanks alot!
 
Name:
Email:
hide my email address.

Your email address will be encoded to prevent email-extraction spiders from reading it so you won't get spammed if you decide to show your email address.