from threading import Thread from django.conf import settings from django.core.mail import EmailMultiAlternatives from django.template.loader import render_to_string as render class EmailThread(Thread): def __init__(self, subject, text, html, to, headers): Thread.__init__(self) self.subject = subject self.text = text self.html = html self.to = to self.headers = headers def run(self): msg = EmailMultiAlternatives(self.subject, self.text, to=(self.to, ), headers=self.headers) msg.attach_alternative(self.html, "text/html") msg.send() def send(name, to, ctx, headers={}): ctx["SITE_ROOT"] = settings.SITE_ROOT subject = render('emails/%s-subject.html' % name, ctx).strip() text = render('emails/%s-body-text.html' % name, ctx) html = render('emails/%s-body-html.html' % name, ctx) t = EmailThread(subject, text, html, to, headers) if hasattr(settings, "BLOCKING_EMAILS"): t.run() else: t.start() def login(to, ctx): send("login", to, ctx) def set_password(to, ctx): send("set-password", to, ctx) def change_email(to, ctx): send("change-email", to, ctx) def alert(to, ctx, headers={}): send("alert", to, ctx, headers) def verify_email(to, ctx): send("verify-email", to, ctx) def report(to, ctx, headers={}): send("report", to, ctx, headers) def invoice(to, ctx, filename, pdf_data): ctx["SITE_ROOT"] = settings.SITE_ROOT subject = render('emails/invoice-subject.html', ctx).strip() text = render('emails/invoice-body-text.html', ctx) html = render('emails/invoice-body-html.html', ctx) msg = EmailMultiAlternatives(subject, text, to=(to, )) msg.attach_alternative(html, "text/html") msg.attach(filename, pdf_data, "application/pdf") msg.send()