Express.jsでメールアドレスを認証する方法
Express.jsを使ってウェブサイト(またはAPI)を構築する際には、ユーザーのメールアドレスを認証し、それが使い捨てでなく本物かどうかを確認すると良いでしょう。一般的に認証のプロセスにはブラックリストに登録されているメールアドレスのチェック、メールサーバーへのSMTP接続可否のチェックなどがあります。とはいえ、メールアドレスの認証は簡単なことではありません。
なぜなら、多くの質問に答えなければならないからです。認証にあたっては、メールアドレスのホスト部分をチェックする必要があります。ドメイン名は本物か?DNSレコードがあり、DNSレコードで指定されたIPアドレスに接続できるか?SMTP接続は設定できるか?使い捨てメールアドレスのサービスを使っているか?などなど。しかし、Email Verification APIにリクエストを1回出すだけで、これら全ての質問に対する答えを得ることができます。
ここでは、開発者向けのemail-verifierライブラリを簡単に統合できる方法を説明します。
Email Verification API Lookupアカウントを作成する
email-verifierライブラリを使ってメールアドレスを検証するには、まずこちらでEmail Verification APIサービスの無料アカウントを作成する必要があります:https://emailverification.whoisxmlapi.com/signup
Email Verification APIは、安価で優れたメール認証サービスです。毎月1,000クエリまで無料になります。または10,000クエリで月額$9の定額サービスもご利用いただけます。その他の料金プランはこちらでご確認ください。
Email Verification APIアカウントを作成してログイン後、アカウントのプロダクトページを表示し、クエリを出す際に必要となるAPIキーをコピーしてください。
Email Verifierパッケージをインストールする
アカウントのセットアップ後、次にemail verifier NPMライブラリをインストールします。コマンドラインから以下のコマンドを実行してください:
$ npm install email-verifier
これにより、NPMから最新リリースのemail-verifierパッケージがダウンロードおよびインストールされます。
Email Verifierによるメール認証リクエストの実行
アカウントとemail-verifierパッケージの両方がインストールされたところで、ユーザーのメールアドレスを認証するために実行できるコードを見てみましょう。
以下は、 /users
という単一のエンドポイントのみを含むシンプルなExpress.jsアプリケーションです。以下の簡単な応答を返します:
const express = require('express');
const usersRouter = require('./routes/users');
const app = express();
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use('/users', usersRouter);
app.listen(3000);
このコードを入力する必要があります。 app.js
ファイルに記入し、実行前に"routes "というフォルダを作り、その中に users.js
ファイルを入れます。このファイルには、以下のコードが含まれます:
const express = require('express');
const router = express.Router();
const verifier = new(require('email-verifier'))("Your-api-key");
router.post('/', function(req, res, next) {
verifier.verify(req.body.email, (err, data) => {
if (err) {
console.error(err);
return res
.status(500)
.send({
message: 'Internal error'
});
}
console.log(data);
if (data.formatCheck === 'true' &&
data.disposableCheck === 'false' &&
data.dnsCheck === ’true’ &&
data.smtpCheck !== 'false'
) {
return res.send({
saved: true
});
}
return res
.status(400)
.send({
message: 'Invalid or disposable email.'
});
});
});
module.exports = router;
' const verifier = new (require('email-verifier'))("Your-api-key");
行はEmailVerifierクラスを初期化します。これで verifier.verify()
アプリ内でメソッドを呼び出すことができます。上のコードではアプリがリクエストを受け取ると POST /users
が呼び出されます。この verifier.verify(req.body.email, (err, data) => {
行は verify
メソッド呼び出しを説明するものです。ユーザーの req.body.email
入力からのメールアドレスが含まれていると仮定しますので、それを認証します。コールバック関数には次の2つの引数があります: err
および data
。1つ目の引数が null
でない場合、何かが間違っていたことを意味します。2番目の引数はAPIコールの結果です。以下の行では、メールのフォーマットが有効なものかどうか、ホストにDNSレコードがあるかどうか、メールサーバーがSMTP接続を拒否しているかどうか、ホストが使い捨てメールアドレスを提供しているかどうかをチェックします。
' data
引数には、次のようなJavaScriptオブジェクトを格納することができます:
{
"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"
}
}
Email Verifierのまとめ
メールアドレスの検証は厄介なものですが、email-verifierとEmail Verification APIサービスを組み合わせて使うことで、簡単かつ安価に認証が実現します。新しいemail-verifierライブラリがあれば、大規模な企業サイトでも、メールアドレス認証を簡単に構築・管理できます。
詳細につきましては、GitHubのemail-verifierライブラリをご参照ください: https://github.com/whois-api-llc/email-verifier
ご質問がございましたら、こちらにメールでお問い合わせください。