From 9baede3a6bc0d518b9a9c4b288f9efbf25ccd437 Mon Sep 17 00:00:00 2001 From: Jonny Scholes Date: Thu, 23 Apr 2020 16:59:07 +1000 Subject: [PATCH] Use send_mass_mail and pass contact to template context --- wagtailbirdsong/backends/__init__.py | 31 +++++++++++++++------------- wagtailbirdsong/views/mail.py | 4 +--- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/wagtailbirdsong/backends/__init__.py b/wagtailbirdsong/backends/__init__.py index 6530962..213c168 100644 --- a/wagtailbirdsong/backends/__init__.py +++ b/wagtailbirdsong/backends/__init__.py @@ -1,23 +1,26 @@ -from django.core.mail import send_mail +from django.core.mail import send_mass_mail class BaseEmailBackend: def __init__(self, params): pass - def send_email(subject, from_email, contacts, html): - for contact in contacts: - # TODO: catch SMTPException and deal with it gracefully - status = send_mail( - subject, - html, - from_email, - [contact], - fail_silently=False, - html_message=html - ) + def send_email(request, campaign, subject, contacts): + from_email = campaign.get_from_email() + messages = () - #TODO: Check status' and return a an object of status counts/error - return True + for contact in contacts: + html = render_to_string(campaign.get_template(request), {'self': campaign, 'request': request, 'contact': contact}) + messages.append((subject, html, from_email, [contact])) + + try: + send_mass_mail(messages) + success = True + except SMTPException as e: + success = False + print('There was an error sending an email: ', e) + + return success def unsubscribe_contact(email): + #TODO: Make this work! And expose an unsubscribe url! Contact.objects.get(email=email).delete() diff --git a/wagtailbirdsong/views/mail.py b/wagtailbirdsong/views/mail.py index d5b219c..c28fde5 100644 --- a/wagtailbirdsong/views/mail.py +++ b/wagtailbirdsong/views/mail.py @@ -7,11 +7,9 @@ from wagtail.contrib.modeladmin.helpers.url import AdminURLHelper def send_helper(request, campaign, subject, contacts): - html = render_to_string(campaign.get_template(request), {'self': campaign, 'request': request}) mail_backend = campaign.get_backend() - from_email = campaign.get_from_email() - return mail_backend.send_email(subject, from_email, contacts, html) + return mail_backend.send_email(request, campaign, subject, contacts) def redirect_helper(campaign):