From efe60be844bd055ef6fbae7c281e4cc4701937bb Mon Sep 17 00:00:00 2001 From: Harry Khanna Date: Mon, 16 Aug 2021 18:40:14 -0400 Subject: [PATCH 1/3] Allow django_backend to take advantage of message_streams --- README.md | 11 +++++++++++ postmark/django_backend.py | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8978d07..468a07d 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,17 @@ mail = EmailMultiAlternatives(subject, msg_plain, from_email, recipients, connec mail.tag = tag mail.send() ``` + +#### Setting the `message_stream` +```python +from django.core.mail import get_connection, EmailMultiAlternatives + +mail = EmailMultiAlternatives(subject, msg_plain, from_email, recipients, connection=connection, headers=headers) + +mail.message_stream = "broadcast" +mail.send() +``` + Tornado ------- diff --git a/postmark/django_backend.py b/postmark/django_backend.py index 7fd503b..a55e067 100644 --- a/postmark/django_backend.py +++ b/postmark/django_backend.py @@ -21,6 +21,11 @@ def __init__(self, *args, **kwargs): else: self.track_opens = getattr(settings, 'POSTMARK_TRACK_OPENS', False) + if 'message_stream' in kwargs: + self.message_stream = kwargs['message_stream'] + else: + self.message_stream = None + super(PMEmailMessage, self).__init__(*args, **kwargs) @@ -38,6 +43,12 @@ def __init__(self, *args, **kwargs): else: self.track_opens = getattr(settings, 'POSTMARK_TRACK_OPENS', False) + if 'message_stream' in kwargs: + self.message_stream = kwargs['message_stream'] + else: + self.message_stream = None + + super(PMEmailMultiAlternatives, self).__init__(*args, **kwargs) @@ -117,6 +128,7 @@ def _build_message(self, message): else: attachments.append(item) + message_stream = getattr(message, "message_stream", None) postmark_message = PMMail(api_key=self.api_key, subject=message.subject, sender=message.from_email, @@ -127,7 +139,8 @@ def _build_message(self, message): html_body=html_body, reply_to=reply_to, custom_headers=custom_headers, - attachments=attachments) + attachments=attachments, + message_stream=message_stream) postmark_message.tag = getattr(message, 'tag', None) postmark_message.track_opens = getattr(message, 'track_opens', False) From e5d94f7d1078c2acfae93aa9af4c5f61701797d7 Mon Sep 17 00:00:00 2001 From: Harry Khanna Date: Mon, 16 Aug 2021 19:12:04 -0400 Subject: [PATCH 2/3] Add Harry Khanna to contributors --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 4543e05..a5064a2 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -28,5 +28,6 @@ Everyone that made python-postmark awesome - Nikolay Fominykh (https://github.com/tigrus) - Gabe Limon (https://github.com/gabelimon) - Olle Hellgren (https://github.com/anulaibar) +- Harry Khanna (https://www.khanna.law/) (Did I miss anyone?) From bbc6d7f3cc79ad52a6497ddae6fb51d9f1d44755 Mon Sep 17 00:00:00 2001 From: Harry Khanna Date: Thu, 7 Oct 2021 11:00:06 -0400 Subject: [PATCH 3/3] Add unit test and other tweaks from code review --- postmark/django_backend.py | 4 +++- tests.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/postmark/django_backend.py b/postmark/django_backend.py index a55e067..593dc43 100644 --- a/postmark/django_backend.py +++ b/postmark/django_backend.py @@ -23,6 +23,7 @@ def __init__(self, *args, **kwargs): if 'message_stream' in kwargs: self.message_stream = kwargs['message_stream'] + del kwargs['message_stream'] else: self.message_stream = None @@ -45,6 +46,7 @@ def __init__(self, *args, **kwargs): if 'message_stream' in kwargs: self.message_stream = kwargs['message_stream'] + del kwargs['message_stream'] else: self.message_stream = None @@ -128,7 +130,7 @@ def _build_message(self, message): else: attachments.append(item) - message_stream = getattr(message, "message_stream", None) + message_stream = getattr(message, 'message_stream', None) postmark_message = PMMail(api_key=self.api_key, subject=message.subject, sender=message.from_email, diff --git a/tests.py b/tests.py index cfb419b..c1f5042 100644 --- a/tests.py +++ b/tests.py @@ -416,6 +416,21 @@ def test_send_attachment_bytes(self): with mock.patch('postmark.core.urlopen', side_effect=HTTPError('', 200, '', {}, None)): message.send() + def test_message_stream(self): + message = EmailMultiAlternatives( + connection=EmailBackend(api_key='dummy'), + from_email='from@test.com', to=['recipient@test.com'], subject='html test', body='hello there' + ) + message.attach_alternative('hello there', 'text/html') + message.message_stream = 'broadcast' + + with mock.patch('postmark.core.urlopen', side_effect=HTTPError('', 200, '', {}, None)) as transport: + message.send() + data = json.loads(transport.call_args[0][0].data.decode('utf-8')) + self.assertEqual('broadcast', data['MessageStream']) + self.assertEqual('hello there', data['TextBody']) + self.assertEqual('hello there', data['HtmlBody']) + if __name__ == '__main__':