EmailListField for Django
Here's a simple Django form field which validates a list of email addresses:
from email.utils import getaddresses, formataddr
from django import forms
from django.utils.translation import ugettext_lazy as _
class EmailListField(forms.CharField):
"""
A Django form field which validates a list of email addresses.
>>> EmailListField().clean('[email protected]')
[u'[email protected]']
>>> EmailListField().clean('User 1 <[email protected]>, User 2 <[email protected]>')
[u'User 1 <[email protected]>', u'User 2 <[email protected]>']
>>> EmailListField().clean('invalid email address')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/sciyoshi/chideit/apps/chide/common/mail/forms.py", line 21, in clean
raise forms.ValidationError(self.error_messages['invalid'])
ValidationError: [u'Please enter a valid list of e-mail addresses.']
>>> EmailListField().clean('"User 3>" < "Abc\\@def"@example.com >, User 2 <[email protected] > , 3rd guy <!def!xyz%[email protected] >')
[u'"User 3>" <"Abc@def"@example.com>', u'User 2 <[email protected]>', u'3rd guy <!def!xyz%[email protected]>']
"""
default_error_messages = {
'invalid': _('Please enter a valid list of e-mail addresses.')
}
def clean(self, value):
value = super(EmailListField, self).clean(value)
field = forms.EmailField()
try:
return [
formataddr((name, field.clean(addr)))
for name, addr in getaddresses([value])]
except forms.ValidationError:
raise forms.ValidationError(self.error_messages['invalid'])