Flaskでメールアドレスを認証する方法
Flaskを使ってウェブサイト(またはAPI)を構築している場合、ユーザーのメールアドレスを認証すると良いでしょう。通常、認証のプロセスにはメールアドレスの情報の取得が含まれますが、これは単純なことではありません。
メールアドレスを対応付ける公開データベースがないため、特定のメールプロバイダーが十分に信頼されているかどうか、あるいは特定のユーザーがそのサービスに存在しているかどうかさえ確認できません。ほとんどの企業は、確認メールを送信することによってユーザーのメールを認証します。しかし、この方法には、存在しないメールアドレスをユーザーが指定している場合にメールがバウンスするという大きな弱点があります。
通常、メールアドレスの認証には以下のような情報が必要です:
- メールアドレスのフォーマットの妥当性
- 使い捨てメールアドレスに含まれているドメイン名のブラックリスト
- ドメイン部分のDNSレコードのチェック結果
- サーバーへのSMTP接続のチェック結果
- そのドメインのメールボックスが無料かどうか
このように、メールアドレスを適切に認証するためには、多くの手順を踏まなければなりません。
今日は、Flaskでメール認証リクエストを簡単に実行できる、非常にシンプルなFlask-EmailVerifierデベロッパーライブラリの使い方を説明します。
Email Verification APIアカウントの作成
Flask-EmailVerifierライブラリを使ってメールアドレスを検証するには、まずこちらでEmail Verification APIサービスの無料アカウントを作成する必要があります:https://emailverification.whoisxmlapi.com/signup.
Email Verification APIは、最大かつ最も安価なメールアドレスデータサービスの1つです。 Email Verification APIがあれば、毎月1,000件の無料メール認証クエリを実行できます。 または、毎月100,000クエリに対して$49の定額プランもご用意しています。追加料金プランの詳細につきましては、こちらをご参照ください。
Email Verification APIアカウントを作成してログインした後、あなたのアカウントの商品ページを表示し、APIキーをコピーしてください。後でメール認証リクエストを出す際に必要になります。
Flask-EmailVerifierパッケージをインストールする
アカウントのセットアップ後、次にFlask-EmailVerifierのPyPiライブラリをインストールします。プロジェクトのルートで、コマンドラインから以下のコマンドを実行します:
$ pip install Flask-EmailVerifier
これにより、PyPiから最新リリースのFlask-EmailVerifierパッケージがダウンロードおよびインストールされます。
Flask-EmailVerifierによるメール認証リクエストの実行
アカウントとFlask-EmailVerifierパッケージの両方がインストールされたところで、メールアドレスを今すぐ認証するために実行できるコードを見てみましょう。
以下は、'/email/<email>'
という単一のエンドポイントのみを含むシンプルなFlaskアプリです。これは、APIリクエストの結果を含むシンプルな応答を返します:
from flask import Flask, make_response
from flask_email_verifier import EmailVerifier
from json import dumps, loads
app = Flask(__name__)
# Initialize the extension
verifier = EmailVerifier(app)
@app.route('/email/<email>')
def email(email):
# Retrieve an info for the given email address
email_address_info = verifier.verify(email)
if email_address_info is not None:
data = dumps(loads(email_address_info.json_string), indent=4)
resp = make_response(data, 200)
resp.headers['Content-Type'] = 'application/json'
else:
resp = make_response('None', 404)
return resp
当社のシンプルなアプリケーションを実行する前に、以下のステップを踏む必要があります。
-
'FLASK_APP'
という環境変数を指定する (export FLASK_APP=app.py
) -
'EMAIL_VERIFIER_KEY'
という環境変数をAPIキーで指定する(export EMAIL_VERIFIER_KEY=’your-api-key
)
このコードを 'app.py'
ファイル内で実行すると、[email protected]についての情報を含むJSON応答が表示されるはずです。ブラウザで '/test/[email protected]'
というエンドポイントにアクセスしてみてください。
この新しいサーバーを起動し、ブラウザで '/email/[email protected]'
というURLにアクセスすると、次のような新しい応答が表示されます:
{
"emailAddress": "[email protected]",
"formatCheck": "true",
"smtpCheck": "false",
"dnsCheck": "true",
"freeCheck": "true",
"disposableCheck": "false",
"catchAllCheck": "false",
"mxRecords": [
"alt3.gmail-smtp-in.l.google.com",
"alt1.gmail-smtp-in.l.google.com",
"alt2.gmail-smtp-in.l.google.com",
"alt4.gmail-smtp-in.l.google.com",
"gmail-smtp-in.l.google.com"
],
"audit": {
"auditCreatedDate": "2018-11-14 13:05:09.000 UTC",
"auditUpdatedDate": "2018-11-14 13:05:09.000 UTC"
}
}
ご覧の通り、応答のデータオブジェクトには全てのメールデータが含まれています。応答オブジェクトには、指定されたメールアドレスについて知る必要がある全ての情報が収録されます。
Flask-EmailVerifierのまとめ
メールアドレスの認証は厄介なものですが、Flask-EmailVerifierとEmail Verification APIサービスを組み合わせて使うことで、簡単に、そして安価に認証が実現します。新しいFlask-EmailVerifierライブラリがあれば、大規模な企業サイトでも簡単にメール検証を構築・管理できます。
詳細につきましては、GitHubのFlask-EmailVerifierライブラリでご確認ください:https://github.com/whois-api-llc/flask-email-verification
ご質問がございましたら、こちらにメールでお問い合わせください。