diff --git a/sendgrid/helpers/mail/mail.py b/sendgrid/helpers/mail/mail.py index de41bad70..a2159b25d 100644 --- a/sendgrid/helpers/mail/mail.py +++ b/sendgrid/helpers/mail/mail.py @@ -262,11 +262,15 @@ class Email(object): def __init__(self, email=None, name=None): self._name = None self._email = None - - if email is not None: - self.email = email - if name is not None: - self.name = name + if name or email: + if not name: + # allows passing emails as "dude Fella " + self.parse_email(email) + else: + #allows backwards compatibility for Email(email, name) + if email is not None: + self.email = email + self.name = name @property def name(self): @@ -293,6 +297,28 @@ def get(self): email["email"] = self.email return email + def parse_email(self, email_info): + try: + import rfc822 + except ImportError: + import email.utils as rfc822 + + name, email = rfc822.parseaddr(email_info) + + # more than likely a string was passed here instead of an email address + if "@" not in email: + name = email + email = None + + if not name: + name = None + + if not email: + email = None + + self.name = name + self.email = email + return name, email class Content(object): diff --git a/test/test_email.py b/test/test_email.py new file mode 100644 index 000000000..92ae10aaa --- /dev/null +++ b/test/test_email.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +import json + +from sendgrid.helpers.mail import (Email) + +try: + import unittest2 as unittest +except ImportError: + import unittest + + +class TestEmailObject(unittest.TestCase): + def test_add_email_address(self): + address = "test@example.com" + email = Email(address) + + self.assertEqual(email.email, "test@example.com") + + def test_add_name(self): + name = "SomeName" + email = Email(name=name) + + self.assertEqual(email.name, name) + + def test_add_name_email(self): + name = "SomeName" + address = "test@example.com" + email = Email(email=address, name=name) + self.assertEqual(email.name, name) + self.assertEqual(email.email, "test@example.com") + + def test_add_rfc_function_finds_name_not_email(self): + name = "SomeName" + email = Email(name) + + self.assertEqual(email.name, name) + self.assertIsNone(email.email) + + def test_add_rfc_email(self): + name = "SomeName" + address = "test@example.com" + name_address = "{0} <{1}>".format(name, address) + email = Email(name_address) + self.assertEqual(email.name, name) + self.assertEqual(email.email, "test@example.com") + + def test_empty_obj_add_name(self): + email = Email() + name = "SomeName" + email.name = name + + self.assertEqual(email.name, name) + + def test_empty_obj_add_email(self): + email = Email() + address = "test@example.com" + email.email = address + + self.assertEqual(email.email, address) \ No newline at end of file