Skip to content

Commit 03564f7

Browse files
committed
Allow creation of Mail from EmailMessage
1 parent 33a3576 commit 03564f7

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

sendgrid/helpers/mail/mail.py

+20
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,23 @@ def get(self):
141141

142142
return {key: value for key, value in mail.items()
143143
if value is not None and value != [] and value != {}}
144+
145+
@classmethod
146+
def from_EmailMessage(cls, message):
147+
"""Create a Mail object from an instance of
148+
email.message.EmailMessage.
149+
:type message: email.message.EmailMessage
150+
:rtype: Mail
151+
"""
152+
mail = cls(
153+
from_email=Email(message.get('From')),
154+
subject=message.get('Subject'),
155+
to_email=Email(message.get('To')),
156+
)
157+
mail.add_content(Content(
158+
message.get_content_type(),
159+
message.get_content()
160+
))
161+
for k, v in message.items():
162+
mail.add_header(Header(k, v))
163+
return mail

test/test_mail.py

+20
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import json
33
import unittest
44

5+
from email.message import EmailMessage
6+
57
from sendgrid.helpers.mail import (
68
ASM,
79
APIKeyIncludedException,
@@ -557,3 +559,21 @@ def test_disable_tracking(self):
557559
def test_directly_setting_substitutions(self):
558560
personalization = Personalization()
559561
personalization.substitutions = [{'a': 0}]
562+
563+
def test_from_emailmessage(self):
564+
message = EmailMessage()
565+
message.set_content('message that is not urgent')
566+
message.set_default_type('text/plain')
567+
message['Subject'] = 'URGENT TITLE'
568+
message['From'] = '[email protected]'
569+
message['To'] = '[email protected]'
570+
mail = Mail.from_EmailMessage(message)
571+
self.assertEqual(mail.subject, 'URGENT TITLE')
572+
self.assertEqual(mail.from_email.email, '[email protected]')
573+
self.assertEqual(len(mail.personalizations), 1)
574+
self.assertEqual(len(mail.personalizations[0].tos), 1)
575+
self.assertDictEqual(mail.personalizations[0].tos[0], {'email': '[email protected]'})
576+
self.assertEqual(len(mail.contents), 1)
577+
content = mail.contents[0]
578+
self.assertEqual(content.type, 'text/plain')
579+
self.assertEqual(content.value, 'message that is not urgent\n')

0 commit comments

Comments
 (0)