diff options
Diffstat (limited to 'lib/utils/email_multipart.py')
-rw-r--r-- | lib/utils/email_multipart.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/lib/utils/email_multipart.py b/lib/utils/email_multipart.py new file mode 100644 index 0000000..4c2e154 --- /dev/null +++ b/lib/utils/email_multipart.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +# Sending html emails in Django +# Report any bugs to esat @t sleytr*net +# Evren Esat Ozkan + + +from feedparser import _sanitizeHTML +from stripogram import html2text + +from django.conf import settings +from django.template import loader, Context + +from email.MIMEMultipart import MIMEMultipart +from email.MIMEText import MIMEText +from email.MIMEImage import MIMEImage +from smtplib import SMTP +import email.Charset + + +charset='utf-8' + + +email.Charset.add_charset( charset, email.Charset.SHORTEST, None, None ) + +def htmlmail(sbj,recip,msg,template='',texttemplate='',textmsg='',images=(), recip_name='',sender=settings.DEFAULT_FROM_EMAIL,sender_name='',charset=charset): + ''' + if you want to use Django template system: + use `msg` and optionally `textmsg` as template context (dict) + and define `template` and optionally `texttemplate` variables. + otherwise msg and textmsg variables are used as html and text message sources. + + if you want to use images in html message, define physical paths and ids in tuples. + (image paths are relative to MEDIA_ROOT) + example: + images=(('email_images/logo.gif','img1'),('email_images/footer.gif','img2')) + and use them in html like this: + <img src="cid:img1"> + ... + <img src="cid:img2"> + ''' + html=render(msg,template) + if texttemplate or textmsg: text=render((textmsg or msg),texttemplate) + else: text= html2text(_sanitizeHTML(html,charset)) + + msgRoot = MIMEMultipart('related') + msgRoot['Subject'] = sbj + msgRoot['From'] = named(sender,sender_name) + msgRoot['To'] = named(recip,recip_name) + msgRoot.preamble = 'This is a multi-part message in MIME format.' + + msgAlternative = MIMEMultipart('alternative') + msgRoot.attach(msgAlternative) + + msgAlternative.attach(MIMEText(text, _charset=charset)) + msgAlternative.attach(MIMEText(html, 'html', _charset=charset)) + + for img in images: + fp = open(img[0], 'rb') + msgImage = MIMEImage(fp.read()) + fp.close() + msgImage.add_header('Content-ID', '<'+img[1]+'>') + msgRoot.attach(msgImage) + + smtp = SMTP() + smtp.connect(settings.EMAIL_HOST) + smtp.login(settings.EMAIL_HOST_USER , settings.EMAIL_HOST_PASSWORD) + smtp.sendmail(sender, recip, msgRoot.as_string()) + smtp.quit() + + +def render(context,template): + if template: + t = loader.get_template(template) + return t.render(Context(context)) + return context + +def named(mail,name): + if name: return '%s <%s>' % (name,mail) + return mail
\ No newline at end of file |