Парсинг email занятие неблагодарное. Да и вообще “баян”, можно в интернете найти регуляку в 1500 символов. Поэтому лучше использовать стандартные валидаторы в фреймворках, например в Django. На худой случай, можно проверять существование домена для отправки почты:
import dns.resolver
def check_mx_domain(email):
try:
domain = email.split('@')[1]
except IndexError:
return False
if not domain:
return False
try:
answers = dns.resolver.query(domain, 'MX')
for data in answers:
if data.exchange:
return True
except (dns.resolver.NXDOMAIN, dns.resolver.Timeout, dns.exception.DNSException):
return False
return False
Можно еще и существование ящика проверить, для этого в SMTP предусмотрена команда VRFY, правда на большинстве серверов эта команда отключена, можно эмулировать сессию отправки почты и не отправлять, но это будет работать только один раз, потому как все приличные сервера после такого запишут вас в спамеры.