E-Mail-Adresse in Python validieren

Olorunfemi Akinlua 21 Juni 2023
  1. Verwenden Sie regex, um E-Mails in Python zu validieren
  2. Verwenden Sie dnspython, um E-Mails in Python zu validieren
E-Mail-Adresse in Python validieren

Die E-Mail-Validierung ist ein wichtiger Teil der Benutzerreise innerhalb einer geschlossenen Anwendung, und sie ist wichtig, insbesondere für die Sicherheit und die Verringerung der Benutzerabwanderung. Es gibt verschiedene Methoden, um die E-Mail zu validieren, und es ist wichtig, die Struktur der typischen E-Mail-Adresse zu verstehen.

Es gibt integrierte Funktionen wie regex und Bibliotheken wie dnspython, die bei diesen Prozessen helfen. In diesem Artikel wird erläutert, wie Sie diese Funktionen und Bibliotheken verwenden, um E-Mails in Python zu validieren.

Verwenden Sie regex, um E-Mails in Python zu validieren

Regulärer Ausdruck, im Volksmund regex genannt, ist eine Zeichenfolge, die ein Suchmuster im Text angibt und für Suchalgorithmen in Strings und zum Suchen und Suchen und Ersetzen hilfreich ist.

Mit regex können wir bestimmte Muster innerhalb der E-Mail-Adresse finden, die wir vom Benutzer erhalten. Jede E-Mail-Adresse hat das gleiche Muster, [Benutzername]@[smtp-Server].com.

Wir können regex verwenden, um den Teil Benutzername und den Teil SMTP server zu finden. Um zu verstehen, wie man regex verwendet, müssen Sie sich mit Metazeichen, speziellen Sequenzen und Mengen auskennen.

Mit diesem Wissen können wir ein regex-Muster mit der compile-Methode erstellen und kompilieren und die match-Methode verwenden, um die Zeichenfolge der E-Mail-Adresse des Benutzers zu vergleichen und zu verifizieren. In Python benötigen wir zur Verwendung von regex die Bibliothek re, die den regulären Ausdruck unterstützt.

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")

Ausgang:

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

Das \"?([-a-zA-Z0-9.?{}]+@\w+\.\w+)\"? string enthält das Regex-Muster, mit dem wir die E-Mail-Adresse des Benutzers vergleichen.

Mit der ersten Eingabe akin@gm.com enthält die E-Mail alle erforderlichen Muster und Strukturen, um eine gültige E-Mail vom Benutzernamen an den SMTP-Server zu erstellen. Für dx@s ist der SMTP-Server jedoch nicht vorhanden.

Wir können auch nach einer Übereinstimmung suchen, indem wir die Methode fullmatch verwenden, die bei Python 3.x am meisten bevorzugt wird. Der Code ist ähnlich, aber wir müssen nur die Methode match auf fullmatch ändern.

Der Unterschied zwischen match und fullmatch besteht darin, dass match nur am Anfang zutrifft, während fullmatch den gesamten Text der Zeichenfolge bis zum Ende abdeckt.

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")

Ausgang:

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

Damit können wir auf eine gültige E-Mail-Struktur prüfen, jedoch nicht, ob der SMTP-Server existiert, was ebenso wichtig ist. Hier kommt das nächste Feature ins Spiel.

Verwenden Sie dnspython, um E-Mails in Python zu validieren

Mit der dnspython-Bibliothek können wir den SMTP-Teil der E-Mail validieren, um zu sehen, ob er echt und nicht erfunden ist. Nachdem wir die E-Mail überprüft und validiert haben, können wir den Teil des SMTP-Servers aufteilen und mit der Methode resolve überprüfen.

Da dnspython keine eingebaute Bibliothek ist, müssen wir es über pip installieren.

pip install dnspython

Nach der Installation von dnspython können wir es in unseren Code importieren und mit der Methode resolve nach einem gültigen SMTP-Server suchen.

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")

Ausgang:

Host smtp.google.com. has preference 10
True

Um den SMTP-Server zu überprüfen, übergeben wir das Attribut MX an die Methode resolve, um den Datensatz mail exchange zu überprüfen, und die zurückgegebenen rdata sind nützlich, um die Attributwerte exchange und preference anzuzeigen.

Wichtig ist aber, mit der Funktion bool zu prüfen, ob innerhalb der Antwort-Bindung Werte vorhanden sind. Wenn dort keine Werte vorhanden sind, bedeutet dies, dass der SMTP server nicht gültig ist.

Um eine umfassende E-Mail-Validierungsprüfung durchzuführen, können wir die Codes regex und dnspython kombinieren.

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.")

Ausgang:

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.

Der Abschnitt try/except hilft beim Umgang mit bestimmten Ausnahmen, wenn der SMTP server nicht existiert.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

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

Verwandter Artikel - Python Email