Python でメールアドレスを検証する
電子メールの検証は、クローズド アプリケーション内でのユーザー ジャーニーの重要な部分であり、特にセキュリティとユーザー チャーンの削減にとって重要です。 電子メールを検証するにはさまざまな方法があり、一般的な電子メール アドレスの構造を理解することが重要です。
regex
などの組み込み機能や、これらのプロセスを支援する dnspython
などのライブラリがあります。 この記事では、これらの機能とライブラリを使用して Python でメールを検証する方法について説明します。
regex
を使用して Python でメールを検証する
一般に regex
と呼ばれる正規表現は、テキスト内の検索パターンを指定する一連の文字であり、文字列の検索アルゴリズムや 検索
および 検索と置換
を実行するのに役立ちます。
regex
を使用すると、ユーザーから受け取ったメール アドレスから特定のパターンを見つけることができます。 すべての電子メール アドレスは、[ユーザー名]@[smtp サーバー].com
という同じパターンを持っています。
regex
を使用して、username
部分と SMTP server
部分を見つけることができます。 regex
の使い方を理解するには、メタ文字、特殊なシーケンス、およびセット について知っておく必要があります。
この知識を使用して、compile
メソッドを使用して regex
パターンを作成およびコンパイルし、match
メソッドを使用してユーザーの電子メール アドレスの文字列を比較して検証することができます。 Python で regex
を使用するには、正規表現をサポートする re
ライブラリが必要です。
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")
出力:
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
\"?([-a-zA-Z0-9.?{}]+@\w+\.\w+)\"?
文字列には、ユーザーの電子メール アドレスと比較する正規表現パターンが含まれます。
最初の入力 akin@gm.com
では、電子メールには、ユーザー名から SMTP サーバーへの有効な電子メールを作成するために必要なすべてのパターンと構造が含まれています。 ただし、dx@s
の場合、SMTP サーバーは存在しません。
Python 3.x で最も好まれる fullmatch
メソッド を使用して一致をチェックすることもできます。 コードは似ていますが、変更する必要があるのは、match
メソッドを fullmatch
に変更することだけです。
match
と fullmatch
の違いは、match
は先頭のみに一致するのに対し、fullmatch
は文字列テキスト全体から最後まで一致することです。
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")
出力:
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
これにより、有効なメール構造を確認できますが、同様に重要な SMTP サーバーが存在するかどうかは確認できません。 そこで登場するのが次の機能です。
dnspython
を使用して Python でメールを検証する
dnspython
ライブラリを使用すると、電子メールの SMTP 部分を検証して、それが実際のものであり、でっちあげではないかどうかを確認できます。 電子メールを確認して検証した後、SMTP サーバーの一部を分割し、resolve
メソッドを使用して確認できます。
dnspython
は組み込みライブラリではないため、pip
を介してインストールする必要があります。
pip install dnspython
dnspython
をインストールした後、それをコードにインポートし、resolve
メソッドを使用して有効な SMTP サーバーを確認できます。
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")
出力:
Host smtp.google.com. has preference 10
True
SMTP サーバーを確認するには、MX
属性を resolve
メソッドに渡して mail exchange
レコードを確認します。返された rdata
は、exchange
および preference
属性の値を確認するのに役立ちます。
ただし、重要なのは、bool
関数を使用して answer
バインディング内に値があるかどうかを確認することです。 そこに値がない場合は、SMTP サーバー
が無効であることを意味します。
包括的な電子メール検証チェックを行うために、regex
コードと 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.")
出力:
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.
try/except
セクションは、SMTP サーバー
が存在しない場合に特定の例外を処理するのに役立ちます。
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