| 8 | | __all__ = ['AddressList'] |
| | 10 | __all__ = ['Address', 'AddressList', 'protected', 'send'] |
| | 11 | |
| | 12 | |
| | 13 | class Address(object): |
| | 14 | 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})$') |
| | 15 | |
| | 16 | def __init__(self, *args): |
| | 17 | assert len(args) < 3 and len(args) > 0, "You must specify an address or a name and address." |
| | 18 | |
| | 19 | if len(args) == 1 and isinstance(args[0], basestring): |
| | 20 | self.name, self.address = parseaddr(args[0]) |
| | 21 | |
| | 22 | elif not isinstance(args[0], basestring): |
| | 23 | self.name, self.address = args[0] |
| | 24 | |
| | 25 | else: |
| | 26 | self.name, self.address = args |
| | 27 | |
| | 28 | if not self.validator.match(self.address): |
| | 29 | raise ValueError, 'Invalid e-mail address.' |
| | 30 | |
| | 31 | super(Address, self).__init__() |
| | 32 | |
| | 33 | def __cmp__(self, other): |
| | 34 | if isinstance(other, (Address, basestring)): |
| | 35 | return cmp(str(self), str(other)) |
| | 36 | elif isinstance(other, tuple): |
| | 37 | return cmp((self.name, self.address), other) |
| | 38 | return cmp(self, other) |
| | 39 | |
| | 40 | def __repr__(self): |
| | 41 | return "Address(\"%s\")" % str(self) |
| | 42 | |
| | 43 | def __str__(self): |
| | 44 | assert self.address, "You must specify an address." |
| | 45 | |
| | 46 | return formataddr((self.name, self.address)).replace("\n", "") |
| | 47 | |
| 31 | | return ",\n ".join(addresses) |
| | 76 | for i in value: |
| | 77 | if not isinstance(i, Address): |
| | 78 | i = Address(i) |
| | 79 | values.append(i) |
| | 80 | |
| | 81 | super(AddressList, self).extend(values) |
| | 82 | |
| | 83 | def append(self, value): |
| | 84 | self.extend([value]) |
| | 85 | |
| | 86 | def addresses(self): |
| | 87 | return AddressList([i.address for i in self]) |
| | 88 | |
| | 89 | addresses = property(addresses) |
| | 90 | |
| | 91 | def protected(cls, field): |
| | 92 | def fget(self): |
| | 93 | return getattr(self, field) |
| | 94 | |
| | 95 | def fset(self, value): |
| | 96 | if not isinstance(value, AddressList): |
| | 97 | value = AddressList(value) |
| | 98 | |
| | 99 | setattr(self, field, AddressList(value)) |
| | 100 | |
| | 101 | def fdel(self): |
| | 102 | setattr(self, field, AddressList()) |
| | 103 | |
| | 104 | return property(fget, fset, fdel) |
| | 105 | |
| | 106 | protected = classmethod(protected) |
| | 107 | |
| | 108 | |
| | 109 | def send(message): |
| | 110 | if not turbomail.manager: |
| | 111 | raise MailNotEnabledError |
| | 112 | |
| | 113 | return turbomail.manager.deliver(message) |