ActiveRecord / MySQL запрос на возврат сгруппированного набора объектов

Стандартная библиотека Python поставляется с функцией разбора электронной почты: email.utils.parseaddr() .

Возвращает двоичный код, содержащий действительное имя и фактические адреса e-mail:

>>> from email.utils import parseaddr
>>> parseaddr('foo@example.com')
('', 'foo@example.com')

>>> parseaddr('Full Name ')
('Full Name', 'full@example.com')

>>> parseaddr('"Full Name with quotes and " ')
('Full Name with quotes and ', 'weird@example.com')

И если синтаксический анализ не увенчался успехом, он возвращает два кортежа пустых строк:

>>> parseaddr('[invalid!email]')
('', '')

Проблема с этим парсером заключается в том, что это принятие чего-либо, что считается действительным адресом электронной почты для RFC-822 и друзей, включая многие вещи, которые явно не адресуются в широком Интернете:

>>> parseaddr('invalid@example,com') # notice the comma
('', 'invalid@example')

>>> parseaddr('invalid-email')
('', 'invalid-email')

Итак, как @TokenMacGuy положил его , единственный окончательный способ проверки адреса электронной почты - отправить электронное письмо на ожидаемый адрес и дождаться, когда пользователь будет воздействовать на информацию внутри сообщения.

Однако вы можете захотеть проверьте, по крайней мере, наличие @ -знака на втором элементе кортежа, поскольку @bvukelic предлагает:

>>> '@' in parseaddr("invalid-email")[1]
False

Если вы хотите сделать еще один шаг, вы можете установить dnspython и разрешить почтовые серверы для домена электронной почты (часть после «@»), только пытается отправить электронное письмо, если есть настоящие MX серверы:

>>> from dns.resolver import query
>>> domain = 'foo@bar@google.com'.rsplit('@', 1)[-1]
>>> bool(query(domain, 'MX'))
True
>>> query('example.com', 'MX')
Traceback (most recent call last):
  File "", line 1, in 
  [...]
dns.resolver.NoAnswer
>>> query('not-a-domain', 'MX')
Traceback (most recent call last):
  File "", line 1, in 
  [...]
dns.resolver.NXDOMAIN

Вы можете поймать оба NoAnswer и NXDOMAIN, поймав dns.exception.DNSException .

И Да, foo@bar@google.com является синтаксически корректным адресом. Только последний @ следует рассмотреть для обнаружения, где начинается доменная часть.

1
задан aaronrussell 18 October 2010 в 12:23
поделиться