diff --git a/AUTHORS.txt b/AUTHORS.txt index ccb7bc9..5ab90fc 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -15,3 +15,4 @@ Eric Hennings Michael Hobbs Sameer Al-Sakran Kyle Gibson +nikolay-saskovets diff --git a/djrill/mail/backends/djrill.py b/djrill/mail/backends/djrill.py index 3e2f945..9e31917 100644 --- a/djrill/mail/backends/djrill.py +++ b/djrill/mail/backends/djrill.py @@ -87,7 +87,6 @@ class DjrillBackend(BaseEmailBackend): if getattr(message, 'alternatives', None): self._add_alternatives(message, msg_dict) self._add_attachments(message, msg_dict) - self._filter_msg_dict(message, msg_dict) api_params['message'] = msg_dict # check if template is set in message to send it via @@ -145,12 +144,16 @@ class DjrillBackend(BaseEmailBackend): content = "html" if message.content_subtype == "html" else "text" msg_dict = { content: message.body, - "subject": message.subject, - "from_email": from_email, "to": to_list } - if from_name: - msg_dict["from_name"] = from_name + + if not getattr(message, 'use_template_from', False): + msg_dict["from_email"] = from_email + if from_name: + msg_dict["from_name"] = from_name + + if not getattr(message, 'use_template_subject', False): + msg_dict["subject"] = message.subject if message.extra_headers: msg_dict["headers"] = message.extra_headers @@ -314,11 +317,3 @@ class DjrillBackend(BaseEmailBackend): 'content': content_b64.decode('ascii'), } return mandrill_attachment, is_embedded_image - - def _filter_msg_dict(self, message, msg_dict): - """Filter message data (e.g. clear subject field, or from field)""" - if hasattr(message, 'clear_from') and message.clear_from: - msg_dict['from_name'] = '' - msg_dict['from_email'] = '' - if hasattr(message, 'clear_subject') and message.clear_subject: - msg_dict['subject'] = '' diff --git a/djrill/tests/test_mandrill_send_template.py b/djrill/tests/test_mandrill_send_template.py index 3242259..45b7416 100644 --- a/djrill/tests/test_mandrill_send_template.py +++ b/djrill/tests/test_mandrill_send_template.py @@ -31,15 +31,24 @@ class DjrillMandrillSendTemplateTests(DjrillBackendMockAPITestCase): msg = mail.EmailMessage('Subject', 'Text Body', 'from@example.com', ['to@example.com']) msg.template_name = "PERSONALIZED_SPECIALS" - msg.clear_from = True - msg.clear_subject = True + msg.use_template_from = True msg.send() self.assert_mandrill_called("/messages/send-template.json") data = self.get_api_call_data() self.assertEqual(data['template_name'], "PERSONALIZED_SPECIALS") - self.assertEqual(data['message']['subject'], "") - self.assertEqual(data['message']['from_email'], "") - self.assertEqual(data['message']['from_name'], "") + self.assertFalse('from_email' in data['message']) + self.assertFalse('from_name' in data['message']) + + def test_send_template_without_subject_field(self): + msg = mail.EmailMessage('Subject', 'Text Body', + 'from@example.com', ['to@example.com']) + msg.template_name = "PERSONALIZED_SPECIALS" + msg.use_template_subject = True + msg.send() + self.assert_mandrill_called("/messages/send-template.json") + data = self.get_api_call_data() + self.assertEqual(data['template_name'], "PERSONALIZED_SPECIALS") + self.assertFalse('subject' in data['message']) def test_no_template_content(self): # Just a template, without any template_content to be merged diff --git a/docs/usage/templates.rst b/docs/usage/templates.rst index beac901..c4b4b5e 100644 --- a/docs/usage/templates.rst +++ b/docs/usage/templates.rst @@ -40,20 +40,29 @@ can be used with templates. How To Use Default Mandrill Subject and From fields ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To use default *Mandril* subject or default from field you need send message -to *Mandril* with empty subject or empty from field. This can be done using -the following attrs: :attr:`clear_subject` and :attr:`clear_from` on +To use default Mandrill "subject" or "from" field from your template definition +(overriding your EmailMessage and Django defaults), set the following attrs: +:attr:`use_template_subject` and/or :attr:`use_template_from` on your :class:`~django.core.mail.EmailMessage` object:: # ... - msg.clear_subject = True - msg.clear_from = True + msg.use_template_subject = True + msg.use_template_from = True msg.send() -If :attr:`clear_subject` is set, Djrill will send message without subject and -Mandrill will use default subject. +.. attribute:: use_template_subject + + If `True`, Djrill will omit the subject, and Mandrill will + use the default subject from the template. + + .. versionadded:: 1.1 + +.. attribute:: use_template_from + + If `True`, Djrill will omit the "from" field, and Mandrill will + use the default "from" from the template. + + .. versionadded:: 1.1 -If :attr:`clear_from` is set, Djrill will send message without from field and -Mandrill will use default from field. .. _django-templates: