Skip to content

Commit ae54113

Browse files
Merge pull request #348 from sendgrid/issue_277
Allows users to submit rfc822 formatted email addresses
2 parents 0884519 + 3f876af commit ae54113

File tree

2 files changed

+90
-5
lines changed

2 files changed

+90
-5
lines changed

sendgrid/helpers/mail/mail.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,11 +262,15 @@ class Email(object):
262262
def __init__(self, email=None, name=None):
263263
self._name = None
264264
self._email = None
265-
266-
if email is not None:
267-
self.email = email
268-
if name is not None:
269-
self.name = name
265+
if name or email:
266+
if not name:
267+
# allows passing emails as "dude Fella <[email protected]>"
268+
self.parse_email(email)
269+
else:
270+
#allows backwards compatibility for Email(email, name)
271+
if email is not None:
272+
self.email = email
273+
self.name = name
270274

271275
@property
272276
def name(self):
@@ -293,6 +297,28 @@ def get(self):
293297
email["email"] = self.email
294298
return email
295299

300+
def parse_email(self, email_info):
301+
try:
302+
import rfc822
303+
except ImportError:
304+
import email.utils as rfc822
305+
306+
name, email = rfc822.parseaddr(email_info)
307+
308+
# more than likely a string was passed here instead of an email address
309+
if "@" not in email:
310+
name = email
311+
email = None
312+
313+
if not name:
314+
name = None
315+
316+
if not email:
317+
email = None
318+
319+
self.name = name
320+
self.email = email
321+
return name, email
296322

297323
class Content(object):
298324

test/test_email.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# -*- coding: utf-8 -*-
2+
import json
3+
4+
from sendgrid.helpers.mail import (Email)
5+
6+
try:
7+
import unittest2 as unittest
8+
except ImportError:
9+
import unittest
10+
11+
12+
class TestEmailObject(unittest.TestCase):
13+
def test_add_email_address(self):
14+
address = "[email protected]"
15+
email = Email(address)
16+
17+
self.assertEqual(email.email, "[email protected]")
18+
19+
def test_add_name(self):
20+
name = "SomeName"
21+
email = Email(name=name)
22+
23+
self.assertEqual(email.name, name)
24+
25+
def test_add_name_email(self):
26+
name = "SomeName"
27+
address = "[email protected]"
28+
email = Email(email=address, name=name)
29+
self.assertEqual(email.name, name)
30+
self.assertEqual(email.email, "[email protected]")
31+
32+
def test_add_rfc_function_finds_name_not_email(self):
33+
name = "SomeName"
34+
email = Email(name)
35+
36+
self.assertEqual(email.name, name)
37+
self.assertIsNone(email.email)
38+
39+
def test_add_rfc_email(self):
40+
name = "SomeName"
41+
address = "[email protected]"
42+
name_address = "{0} <{1}>".format(name, address)
43+
email = Email(name_address)
44+
self.assertEqual(email.name, name)
45+
self.assertEqual(email.email, "[email protected]")
46+
47+
def test_empty_obj_add_name(self):
48+
email = Email()
49+
name = "SomeName"
50+
email.name = name
51+
52+
self.assertEqual(email.name, name)
53+
54+
def test_empty_obj_add_email(self):
55+
email = Email()
56+
address = "[email protected]"
57+
email.email = address
58+
59+
self.assertEqual(email.email, address)

0 commit comments

Comments
 (0)