From 80813addb9b588682ba1d5d52b35157a8859e61f Mon Sep 17 00:00:00 2001 From: Serghei Mihai Date: Tue, 4 Oct 2016 17:03:28 +0200 Subject: [PATCH] compute email message body once (#13552) --- corbo/models.py | 26 ++++++++++++++------------ corbo/templates/corbo/announce.html | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/corbo/models.py b/corbo/models.py index 03617fb..f78fba6 100644 --- a/corbo/models.py +++ b/corbo/models.py @@ -24,6 +24,8 @@ channel_choices = ( ('homepage', _('Homepage')) ) +UNSUBSCRIBE_LINK_PLACEHOLDER = '##UNSUBSCRIBE_LINK_PLACEHOLDER##' + logger = logging.getLogger(__name__) @@ -113,7 +115,15 @@ class Broadcast(models.Model): total_sent = 0 handler = HTML2Text() template = loader.get_template('corbo/announce.html') - m = Message(subject=self.announce.title, mail_from=settings.CORBO_DEFAULT_FROM_EMAIL) + message = Message(subject=self.announce.title, mail_from=settings.CORBO_DEFAULT_FROM_EMAIL, + html=template.render(Context({'content': self.announce.text, + 'unsubscribe_link_placeholder': UNSUBSCRIBE_LINK_PLACEHOLDER}))) + message.transformer.apply_to_images(func=transform_image_src) + # perform transformations in message html, like inline css parsing + message.transformer.load_and_transform() + # mark all attached images as inline + message.transformer.make_all_images_inline() + message.transformer.save() for s in subscriptions: if not s.identifier: continue @@ -121,18 +131,10 @@ class Broadcast(models.Model): 'identifier': s.identifier}) unsubscribe_link = urlparse.urljoin(settings.SITE_BASE_URL, reverse('unsubscribe', kwargs={'unsubscription_token': unsubscribe_token})) - message = template.render(Context({'unsubscribe_link': unsubscribe_link, - 'content': self.announce.text})) - m.html = message - m.transformer.apply_to_images(func=transform_image_src) - # perform transformations in message html, like inline css parsing - m.transformer.load_and_transform() - # mark all attached images as inline - m.transformer.make_all_images_inline() - m.transformer.save() + message.html = message.html.replace(UNSUBSCRIBE_LINK_PLACEHOLDER, unsubscribe_link) handler.body_width = 0 - m.text = handler.handle(m.html) - sent = m.send(to=s.identifier) + message.text = handler.handle(message.html) + sent = message.send(to=s.identifier) if sent: total_sent += 1 logger.info('Announce "%s" sent to %s', self.announce.title, s.identifier) diff --git a/corbo/templates/corbo/announce.html b/corbo/templates/corbo/announce.html index 39592e4..ae6a6e2 100644 --- a/corbo/templates/corbo/announce.html +++ b/corbo/templates/corbo/announce.html @@ -4,6 +4,6 @@ -- 2.9.3