diff --git a/djrill/mail/backends/djrill.py b/djrill/mail/backends/djrill.py index d9997cf..e680946 100644 --- a/djrill/mail/backends/djrill.py +++ b/djrill/mail/backends/djrill.py @@ -4,6 +4,7 @@ from django.core.mail.backends.base import BaseEmailBackend from django.core.mail.message import sanitize_address from django.utils import simplejson as json +from email.utils import parseaddr import requests class DjrillBackendHTTPError(Exception): @@ -62,7 +63,6 @@ class DjrillBackend(BaseEmailBackend): self.sender = sanitize_address(message.from_email, message.encoding) recipients_list = [sanitize_address(addr, message.encoding) for addr in message.recipients()] - from email.utils import parseaddr self.recipients = [{"email": e, "name": n} for n,e in [ parseaddr(r) for r in recipients_list]] @@ -96,22 +96,27 @@ class DjrillBackend(BaseEmailBackend): use by default. Standard text email messages sent through Django will still work through Mandrill. """ - return { + from_name, from_email = parseaddr(self.sender) + msg_dict = { "text": message.body, "subject": message.subject, - "from_email": self.sender, + "from_email": from_email, "to": self.recipients } + if from_name: + msg_dict["from_name"] = from_name + return msg_dict def _build_advanced_message_dict(self, message): """ Builds advanced message dict and attaches any accepted extra headers. """ self.msg_dict.update({ - "from_name": message.from_name, "tags": message.tags, "track_opens": message.track_opens, }) + if message.from_name: + self.msg_dict["from_name"] = message.from_name if message.extra_headers: accepted_headers = {} diff --git a/djrill/tests.py b/djrill/tests.py index eebba74..2851f10 100644 --- a/djrill/tests.py +++ b/djrill/tests.py @@ -55,6 +55,7 @@ class DjrillBackendTests(DjrillBackendMockAPITestCase): data = self.get_api_call_data() self.assertEqual(data['message']['subject'], "Subject here") self.assertEqual(data['message']['text'], "Here is the message.") + self.assertFalse('from_name' in data['message']) self.assertEqual(data['message']['from_email'], "from@example.com") self.assertEqual(len(data['message']['to']), 1) self.assertEqual(data['message']['to'][0]['email'], "to@example.com") @@ -65,6 +66,22 @@ class DjrillBackendTests(DjrillBackendMockAPITestCase): mail.send_mail('Subject', 'Message', 'from@example.com', ['to@example.com']) + def test_name_addr(self): + """Make sure RFC2822 name-addr format (with display-name) is allowed + + (Test both sender and recipient addresses) + """ + mail.send_mail('Subject', 'Message', 'From Name ', + ['Recipient #1 ', 'to2@example.com']) + data = self.get_api_call_data() + self.assertEqual(data['message']['from_name'], "From Name") + self.assertEqual(data['message']['from_email'], "from@example.com") + self.assertEqual(len(data['message']['to']), 2) + self.assertEqual(data['message']['to'][0]['name'], "Recipient #1") + self.assertEqual(data['message']['to'][0]['email'], "to1@example.com") + self.assertEqual(data['message']['to'][1]['name'], "") + self.assertEqual(data['message']['to'][1]['email'], "to2@example.com") + class DjrillMessageTests(TestCase): def setUp(self):