- Timestamp:
- 11/07/08 14:49:39 (2 months ago)
- Location:
- trunk
- Files:
-
- 2 modified
-
tests/test_address_list.py (modified) (3 diffs)
-
turbomail/util.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/test_address_list.py
r92 r112 6 6 7 7 import unittest 8 from turbomail.util import Address List8 from turbomail.util import Address, AddressList 9 9 try: 10 10 from email.mime.text import MIMEText … … 15 15 import logging 16 16 logging.disable(logging.WARNING) 17 18 19 class TestAddress(unittest.TestCase): 20 def test_punycode(self): 21 addr = Address("Foo", u"foo@exámple.test") 22 self.assertEqual("Foo <foo@xn--exmple-qta.test>", str(addr)) 17 23 18 24 … … 61 67 self.assertEqual(str(self.addresses[-1]), "eviluser@example.com") 62 68 69 # Double-at symbols automatically strip from the second at on. 70 self.addresses.append("bad@user@example.com") 71 self.assertEqual(str(self.addresses[-1]), "bad@user") 72 63 73 self.assertRaises(ValueError, lambda: self.addresses.append("baduser.example.com")) 64 self.assertRaises(ValueError, lambda: self.addresses.append("bad@user@example.com"))65 74 self.assertRaises(ValueError, lambda: self.addresses.append("bad-u+s+er@example.com")) 66 self.assertRaises(ValueError, lambda: self.addresses.append("baduser@example")) 75 76 # Domains without TLDs are now supported. 77 self.addresses.append("user@company") 78 self.assertEqual(str(self.addresses[-1]), "user@company") 67 79 68 80 del self.addresses -
trunk/turbomail/util.py
r101 r112 7 7 import re 8 8 import turbomail 9 from turbomail.exceptions import MailNotEnabledError10 9 from email.Header import Header 11 10 from email.Utils import parseaddr, formataddr … … 25 24 class as well.""" 26 25 27 validator = re.compile(r'^( [0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(\+([0-9a-zA-Z])+)?@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$')26 validator = re.compile(r'^(\w([-.\w]*\w)*(\+\w+)?@(\w(\-*\w)+)+(\.\w{2,9})*)$', re.UNICODE) 28 27 29 28 def __init__(self, *args): … … 62 61 if isinstance(name_string, unicode): 63 62 name_string = str(Header(name_string, encoding)) 64 return formataddr((name_string, self.address)).replace("\n", "") 63 64 # Encode punycode for internationalized domains. 65 localpart, domain = self.address.split("@") 66 if isinstance(domain, unicode): 67 domain = domain.encode("idna") 68 address = "@".join((localpart, domain)) 69 70 return formataddr((name_string, address)).replace("\n", "") 65 71 66 72
