Validar dirección de correo electrónico en Python
-
Use
regex
para validar el correo electrónico en Python -
Use
dnspython
para validar el correo electrónico en Python
La validación de correo electrónico es una parte importante del viaje del usuario dentro de una aplicación cerrada, y es importante, especialmente para la seguridad y la reducción de la rotación de usuarios. Existen diferentes métodos para validar el correo electrónico, y es importante comprender la estructura de la dirección de correo electrónico típica.
Hay funciones integradas como regex
y bibliotecas como dnspython
que ayudan con estos procesos. Este artículo explicará cómo usar estas funciones y bibliotecas para validar correos electrónicos en Python.
Use regex
para validar el correo electrónico en Python
La expresión regular, popularmente llamada regex
, es una secuencia de caracteres que especifica un patrón de búsqueda en el texto y es útil para buscar algoritmos en cadenas y hacer buscar
y buscar y reemplazar
.
Con regex
, podemos encontrar ciertos patrones dentro de la dirección de correo electrónico que recibimos del usuario. Cada dirección de correo electrónico tiene el mismo patrón, [nombre de usuario]@[servidor smtp].com
.
Podemos usar regex
para encontrar la parte del nombre de usuario
y la parte del servidor SMTP
. Para comprender cómo usar regex
, debe conocer metacaracteres, secuencias especiales y conjuntos.
Usando este conocimiento, podemos crear y compilar un patrón de regex
usando el método de “compilar” y usar el método de “coincidencia” para comparar la cadena de la dirección de correo electrónico del usuario para verificarla. En Python, para usar regex
, necesitamos la biblioteca re
, que admite la expresión regular.
import re
user_email = input("Enter your Email Address: ")
pattern = re.compile(r"\"?([-a-zA-Z0-9.`?{}]+@\w+\.\w+)\"?")
if not re.match(pattern, user_email):
print(f"{user_email} is not a valid email address")
else:
print(f"Your {user_email} is a valid email address")
Producción :
PS C:\Users\akinl\Documents\Python> python email.py
Enter your Email Address: akin@gm.com
Your akin@gm.com is a valid email address
PS C:\Users\akinl\Documents\Python> python email.py
Enter your Email Address: dx@s
dx@s is not a valid email address
El \"?([-a-zA-Z0-9.?{}]+@\w+\.\w+)\"?
string contiene el patrón de expresión regular con el que compararemos la dirección de correo electrónico del usuario.
Con la primera entrada, akin@gm.com
, el correo electrónico contiene todos los patrones y la estructura necesarios para crear un correo electrónico válido desde el nombre de usuario al servidor SMTP. Sin embargo, para dx@s
, el servidor SMTP es inexistente.
También podemos verificar si hay una coincidencia usando el método fullmatch
, que es el más preferido con Python 3.x. El código es similar, pero todo lo que necesitamos cambiar es el método match
a fullmatch
.
La diferencia entre match
y fullmatch
es que match
coincide solo al principio, mientras que fullmatch
coincide con todo el texto de la cadena hasta el final.
import re
user_email = input("Enter your Email Address: ")
pattern = re.compile(r"\"?([-a-zA-Z0-9.`?{}]+@\w+\.\w+)\"?")
if not re.fullmatch(pattern, user_email):
print(f"{user_email} is not a valid email address")
else:
print(f"Your {user_email} is a valid email address")
Producción :
PS C:\Users\akinl\Documents\Python> python email.py
Enter your Email Address: akin@gmail.com
Your akin@gmail.com is a valid email address
Con esto, podemos comprobar si existe una estructura de correo electrónico válida, aunque no podemos comprobar si existe el servidor SMTP, que es igualmente importante. Ahí es donde entra la siguiente característica.
Use dnspython
para validar el correo electrónico en Python
Con la biblioteca dnspython
, podemos validar la parte SMTP del correo electrónico para ver si es real y no inventado. Después de verificar y validar el correo electrónico, podemos dividir la parte del servidor SMTP y verificar usando el método resolver
.
Dado que dnspython
no es una biblioteca integrada, debemos instalarla a través de pip
.
pip install dnspython
Después de instalar dnspython
, podemos importarlo a nuestro código y usar el método resolve
para buscar un servidor SMTP válido.
import dns.resolver
try:
answers = dns.resolver.resolve("google.com", "MX")
for rdata in answers:
print("Host", rdata.exchange, "has preference", rdata.preference)
print(bool(answers))
except dns.exception.DNSException as e:
print("Email Doesn't Exist")
Producción :
Host smtp.google.com. has preference 10
True
Para verificar el servidor SMTP, pasamos el atributo MX
al método resolve
para verificar el registro de “intercambio de correo”, y los rdata
devueltos son útiles para ver los valores de los atributos “intercambio” y “preferencia”.
Sin embargo, lo importante es verificar si hay valores dentro del enlace respuesta
utilizando la función bool
. Si no hay valores allí, significa que el servidor SMTP
no es válido.
Para realizar una verificación exhaustiva de la validación del correo electrónico, podemos combinar los códigos regex
y dnspython
.
import dns.resolver
import re
user_email = input("Enter your Email Address: ")
pattern = re.compile(r"\"?([-a-zA-Z0-9.`?{}]+@\w+\.\w+)\"?")
if not re.fullmatch(pattern, user_email):
print(f"{user_email} is not a valid email address.")
else:
domain = user_email.rsplit("@", 1)[-1]
try:
answers = dns.resolver.resolve(domain, "MX")
if bool(answers):
print(f"Your {user_email} is a valid email address.")
except dns.exception.DNSException as e:
print("Not a valid email server.")
Producción :
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: akin@gmail.com
Your akin@gmail.com is a valid email address.
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: ds.cem@fex.co
Your ds.cem@fex.co is a valid email address.
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: wer@fghj.com
Your wer@fghj.com is a valid email address.
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: df@werabsjaksa.com
Not a valid email server.
PS C:\Users\akinl\Documents\Python> python testEmail.py
Enter your Email Address: des@python.exe
Not a valid email server.
La sección probar/excepto
ayuda a tratar ciertas excepciones cuando el servidor SMTP
no existe.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn