def normalize_email(email): """ Return a normalized form of the email address: - lowercase - applying host-specific rules for domains hosted by Google, Microsoft, Yahoo, Fastmail """ return email_normalize.normalize(email.strip(), resolve=False)
def test_invalid_domain_part(self): address = '{}@{}'.format(uuid.uuid4(), uuid.uuid4()) result = email_normalize.normalize(address) self.assertIsInstance(result, email_normalize.Result) self.assertEqual(result.address, address) self.assertEqual(result.normalized_address, address) self.assertListEqual(result.mx_records, []) self.assertIsNone(result.mailbox_provider)
def normalize(addresses): logging.debug(addresses) result = [] for address in addresses: try: cleaned = email_normalize.normalize(address, resolve=False) if isinstance(cleaned, str): result.append(cleaned) except: pass return set(result)
def _perform_test(self, address: str, normalized: str, mx_records: typing.List[typing.Tuple[int, str]], provider: typing.Optional[str]): with mock.patch('email_normalize.Normalizer.mx_records') as mxr: mxr.return_value = mx_records result = email_normalize.normalize(address) self.assertIsInstance(result, email_normalize.Result) self.assertEqual(result.address, address) self.assertEqual(result.normalized_address, normalized) self.assertListEqual(result.mx_records, mx_records) self.assertEqual(result.mailbox_provider, provider)
def clean_email(self, *args, **kwargs): address = self.cleaned_data['email'] norm_addr = email_normalize.normalize(address) _, domain = norm_addr.rsplit('@', 1) if domain in utils.get_config('email_host_blacklist'): raise ValidationError( ('Accounts can not be resistered with email addresses ' 'provided by this host.'), code='BAD_HOST') if Poster.objects.filter(normalized_email=norm_addr).count(): raise ValidationError( 'Email address is already associated with an account', code='TOO_SIMILAR') return address
def test_normalization(self): self.assertEqual(normalize('*****@*****.**'), '*****@*****.**')
def test_normalization_tld_b(self): self.assertEqual(normalize('*****@*****.**'), '*****@*****.**')
def test_no_resolution(self): self.assertEqual(normalize('"Me!" <*****@*****.**>', False), '*****@*****.**')
def test_mx_verification_normalization(self): self.assertEqual(normalize('*****@*****.**'), '*****@*****.**')
def test_gmail_domain_part(self): self.assertEqual(normalize('"Me!" <*****@*****.**>'), '*****@*****.**')
def test_fastmail_variation_b(self): self.assertEqual(normalize('*****@*****.**'), '*****@*****.**')
def test_fastmail_variation_a(self): self.assertEqual(normalize('*****@*****.**'), '*****@*****.**')
def set_normalized_email(sender, instance, **kwargs): if instance.email: instance.normalized_email = email_normalize.normalize(instance.email)
def normalize_email(apps, schema_editor): Poster = apps.get_model('ISS', 'Poster') for poster in Poster.objects.all(): poster.normalized_email = normalize(poster.email) poster.save()
# pip install email-normalize from email_normalize import normalize # from email_normalizer import normalize normalized = normalize('*****@*****.**') print(normalized) normalized = normalize('*****@*****.**') print(normalized) normalized = normalize('*****@*****.**') print(normalized)