Node.jsでメールアドレスを認証する方法
ここでは、メールアドレスを認証して貴社のPHPウェブサイトのユーザー登録プロセスを改善する方法について説明します。
メールアドレスの認証は非常に重要です。以下を含むさまざまな理由により、貴社のサイトにサインアップするユーザーのメールアドレスが有効であることを確認する必要があります:
- ユーザーがメールアドレスを入力する際にタイプミスした場合、それを検出し、登録を許可する前にユーザーに修正を促すことができます。
- クレジットカードの有効期限が切れた時、領収書を送る時、新機能の追加を連絡する時などに、ユーザーと常に連絡を取ることができます。
- 万が一ユーザーがパスワードを忘れてしまった場合でも、安全にパスワードをリセットすることができます。メールアドレスがない場合、手作業による人による確認以外にその人の身元を確認する方法はありません。
- 貴社サイトにおいて Mailinatorのような使い捨てメールアドレスを使ったユーザーのサインアップを防ぎます。そのようなユーザーは、通常、フリーミアム機能を悪用するためなど、特別な理由で本当のメールアドレスを教えたがりません。本物の個人または企業のメールアドレスを持つユーザーのみに登録を許可することで、ウェブサイト悪用のリスクを減らすことができます。
しかし、メール認証が複雑になるのは、貴社のウェブサイトのメールアドレスをどのように検証するかを決めるときです。ウェブサイトごとに要件は異なりますし、ウェブサイトの内容によっては、1つか2つの特定の方法でしかユーザーのメールアドレスを認証したくないという場合もあります。
この問題を解決するために、WhoisXML APIはemail-verifierライブラリをリリースしました。
このNodeライブラリを使うと、後述の通り、様々な方法で容易かつ柔軟にメールアドレスを認証できます。
では、さっそくその仕組みを見てみましょう!
Email Verificationアカウントの作成
email-verifierライブラリを使ってメールアドレスを検証するには、まずこちらでEmail Verification APIサービスの無料アカウントを作成する必要があります:https://emailverification.whoisxmlapi.com/signup
無料アカウントを作成すると、APIサービスを使って1,000件のメールアドレスを無料で認証できるようになります。それ以上の件数をご希望の場合は、小額の料金をお支払いいただくことも可能です。
パッケージをインストールする
アカウントが設定されましたので、次にNodeパッケージをインストールします。コマンドラインから以下のコマンドを実行します。
$ npm install email-verifier
これにより、NPMから最新版のemail-verifierパッケージがダウンロードおよびインストールされます。
メールアドレスの認証
アカウントとパッケージの両方がインストールされたところで、メールアドレスを今すぐ認証するために実行できるコードを見てみましょう。
以下は利用可能な全ての方法でメールアドレスを認証する「verify.js」というスクリプトです:
const Verifier = require("email-verifier");
let verifier = new Verifier("your_email_verification_api_key");
verifier.verify("[email protected]", (err, data) => {
if (err) throw err;
console.log(data);
});
以下の3つの手順でライブラリを使えるようになります。
- ライブラリをインポートする。
- APIサービスを申し込んだ際に作成したAPIキーを渡して、「Verifier」オブジェクトを作成する。
- 「verify」メソッドを実行し、認証したいメールアドレスとコールバック関数を渡します。 このコールバック関数は、認証が完了したときに実行されます。
次のようなデータがコールバックで返されます。
{
"catchAll": "false",
"disposable": "false",
"dns": "OK",
"emailAddress": "[email protected]",
"free": "false",
"mxs": [ "mail.protonmail.ch" ],
"smtp": "OK",
"validFormat": "OK"
}
返されるJSON値は、それぞれ異なる認証タイプに対応します:
- 「catchAll」は、このメールアドレスが「キャッチオール」アドレスであるかどうかをチェックします。 キャッチオールアドレスは、これは、他のアドレスのメールを受け取れる特殊なタイプのアドレスを指します。[email protected]と別のアドレスである[email protected]にメールを送るとその両方のメールが同じ受信トレイに入るようなビジネスでよく使われます。
- 「disposable」Checkは、メールアドレスが(Mailinatorのようなサービスで作成された)使い捨てかどうかをチェックします。これは不正利用のチェックに役立ちます。使い捨てメールアドレスでない場合、この値はfalseになり、それ以外の場合はtrueになります。
- 「dnsCheck」は、メールアドレスのドメイン名(例:gmail.com)が有効なドメイン名かどうかをチェックします。有効であれば、この値はOKになります。
- 「free」オプションは、メールアドレスがGmailなどのフリーメールプロバイダーのものかどうかをチェックします。フリーメールアドレスでない場合、この値はfalseに、そうでない場合はtrueになります。
- 「validFormat」は、メールアドレスにシンタックスエラーがあるかどうかを確認します。これは、単純なタイプミスや大きなエラーを検出するための基本的なチェックです。エラーがなければこの値はfalseに、ある場合はtrueになります。
舞台裏では、APIサービスがこれらの認証チェックを全て処理しています。これについては、今後出す記事で取り上げます。
Email Verificationのカスタマイズ
上では利用可能な全てのメールアドレス認証方法を示しました。しかし、これらの方法をそのまま使うのではなく、カスタマイズをお考えになるかもしれません。
メール認証には時間がかかることがあります。各認証にかかる時間はわずか(コンマ数秒)ですが、全てのチェックを実行すると、かかる時間がどんどん増えていきます。
例えば、貴社のサイトでメールを受信できるか確認するためだけに認証を行う場合には、email-verifierパッケージの設定でそのチェックだけを実行させることが可能です。email-verifierライブラリは非常に柔軟で、あらゆるチェックを必要に応じて有効にも無効にもできます。
その仕組みは以下の通りです:
const Verifier = require("email-verifier");
let verifier = new Verifier("your_email_verification_api_key", {
checkCatchAll: false,
checkDisposable: false,
checkFree: false,
validateDNS: false,
validateSMTP: false
});
「Verifier」オブジェクトを作成する際、上述の追加オプションを渡すことができます。これらのオプションは、実行するチェックの種類に直接影響します。必要に応じて自由にご使用ください。
- 注意: 「Verifier」オブジェクトを一度作成すると、メールアドレス認証のために「verify」メソッドを呼び出す際、「Verifier」の作成時に指定したオプションは有効なままになります。
ユーザー登録フローの改善
以上、email-verifierライブラリを使用してメールアドレスを認証する方法をご覧いただきました。 こうした認証を実行するにあたり、貴社のウェブサイトの登録プロセスを変更する必要があるかもしれません。
その場合、ユーザーが登録フォームに入力して送信する際の手順は以下のようにしてください:
- ウェブサーバーでフォームデータを受け取る。
- メールアドレスを含む、ユーザーの登録データを解析する。
- email-verifierライブラリを使用して、ユーザーのメールアドレスを即座に認証する。
- メールアドレスが無効な場合、ユーザーにエラーを表示し、再試行を促す。
- 問題がなければ、ユーザーの新しいアカウントを作成し、ログインさせる。
こうしたステップを踏むことで、ユーザーのタイプミスや間違いを登録プロセスの早い段階で発見し、ウェブサイトの登録フローを大幅に改善することができます。
まとめ
ユーザーのメールアドレスの認証は、貴社のウェブサイトのユーザー体験を向上させるシンプルな方法です。
新しいemail-verifier は、さまざまな種類のメールアドレス認証を扱うことができる非常に柔軟なツールです。
ご質問がございましたら、こちらにメールでお問い合わせください。