PHPでメールアドレスを認証する方法
ここでは、メールアドレスを認証して貴社のPHPウェブサイトのユーザー登録プロセスを改善する方法について説明します。
メールアドレスの認証は非常に重要です。以下を含むさまざまな理由により、貴社のサイトにサインアップするユーザーのメールアドレスが有効であることを確認する必要があります:
- ユーザーがメールアドレスの入力時にタイプミスした場合にそれを検出し、登録を許可する前にユーザーに修正を促すことができます。
- クレジットカードの有効期限、領収書の送付、新機能の追加などについて、ユーザーと常にメールで連絡を取ることができます。
- 万が一ユーザーがパスワードを忘れてしまった場合でも、安全にパスワードをリセットすることができます。メールアドレスがない場合、手作業による人による確認以外にその人の身元を確認する方法はありません。
- 貴社サイトにおいてMailinatorのような使い捨てメールアドレスを使ったユーザーのサインアップを防ぎます。そのようなユーザーは、通常、フリーミアム機能を悪用するためなど、特別な理由で本当のメールアドレスを教えたがりません。本物の個人または企業のメールアドレスを持つユーザーのみに登録を許可することで、ウェブサイト悪用のリスクを減らすことができます。
しかし、メール認証が複雑になるのは、貴社のウェブサイトのメールアドレスをどのように検証するかを決めるときです。ウェブサイトごとに要件は異なりますし、ウェブサイトの内容によっては、1つか2つの特定の方法でしかユーザーのメールアドレスを認証したくないという場合もあります。
この問題を解決するために、WhoisXML APIはemail-verifier Packagistライブラリをリリースしました。
このPHPライブラリを使うと、後述の通り、様々な方法で容易かつ柔軟にメールアドレスを認証できます。
では、さっそくその仕組みを見てみましょう!
Email Verificationアカウントの作成
email-verifierライブラリを使ってメールアドレスを検証するには、まずこちらでEmail Verification APIサービスの無料アカウントを作成する必要があります:https://emailverification.whoisxmlapi.com/signup
無料アカウントを作成すると、APIサービスを使って1,000件のメールアドレスを無料で認証できるようになります。それ以上の件数をご希望の場合は、小額の料金をお支払いいただくことも可能です。
パッケージをインストールする
アカウントのセットアップが完了したら、次はPHPパッケージをインストールします。コマンドラインから以下のコマンドを実行します:
$ composer require whois-api/email-verifier
これにより、Packagistから最新リリースのemail-verifier パッケージがダウンロードおよびインストールされます。
メールアドレスの認証
アカウントとパッケージの両方がインストールされたところで、メールアドレスをすぐに認証するために実行できるコードを見てみましょう。
以下は、利用可能な全てのメソッドを使用してメールアドレスを認証する verify.php
というスクリプトです:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use WhoisApi\EmailVerifier\Builders\ClientBuilder;
$builder = new ClientBuilder();
$client = $builder->build('Your API key');
try {
/* Without refreshing */
echo print_r($client->get('[email protected]', ['_hardRefresh']), true);
echo PHP_EOL;
} catch (\Throwable $exception) {
echo "Error: {$exception->getCode()} {$exception->getMessage()}" . PHP_EOL;
}
以下の3つの手順でライブラリを使えるようになります。
- Composerのオートロードファイルとクライアントビルダーをライブラリからインポートします。
- APIサービスを申し込んだ時に作成したAPIキーを使い、
ApiClient
オブジェクトを作成します。 - 認証したいメールアドレス、オプションとその値を含む辞書を渡して
GET
メソッドを実行します。デフォルトでは、使用可能なオプションは全て有効になっています。使用可能なオプションは次の通りです:validateDNS
,validateSMTP
,checkCatchAll
,checkFree
,checkDisposable
,_hardRefresh
。これらのオプションの説明は当社の ドキュメントページにあります。.
この例で表示されるデータは以下のようになります:
WhoisApi\EmailVerifier\Models\Response Object
(
[emailAddress] => [email protected]
[formatCheck] => 1
[smtpCheck] => 1
[dnsCheck] => 1
[freeCheck] =>
[disposableCheck] =>
[catchAllCheck] => 1
[mxRecords] => Array
(
[0] => ALT1.ASPMX.L.GOOGLE.com
[1] => ALT2.ASPMX.L.GOOGLE.com
[2] => ASPMX.L.GOOGLE.com
[3] => ASPMX2.GOOGLEMAIL.com
[4] => ASPMX3.GOOGLEMAIL.com
)
[audit] =>
[auditModel:protected] => WhoisApi\EmailVerifier\Models\Audit Object
(
[auditCreatedDate] => Carbon\Carbon Object
(
[date] => 2018-09-21 15:52:51.000000
[timezone_type] => 3
[timezone] => UTC
)
[auditUpdatedDate] => Carbon\Carbon Object
(
[date] => 2018-09-21 15:52:51.000000
[timezone_type] => 3
[timezone] => UTC
)
)
)
disposableCheck
および freeCheck
には false
という見えない値があります(ブーリアン型)。
返されるオブジェクトの値は、それぞれ異なるタイプの認証に対応します:
- '
catchAllCheck
'は、このメールアドレスが「キャッチオール」アドレスかどうかをチェックします。 キャッチオールアドレスとは、存在しないメールアドレスに送られたメールメッセージを受信できる特別なメールアドレスのことです。[email protected]にメールを送り、別のメールを [email protected] にメールを送ったときに両方のメールが同じ受信トレイに送られます。 - '
disposableCheck
'は、メールアドレスが(Mailinatorのようなサービスで作成された)使い捨てアドレスかどうかを確認します。これは不正利用のチェックに役立ちます。使い捨てメールアドレスでない場合、この値は'false
'になります。使い捨てである場合は'true
'になります。 - '
dnsCheck
'は、メールアドレスのドメイン名(例:gmail.com)が有効かどうかをチェックします。 有効な場合、この値は'OK
になります。 - '
freeCheck
'オプションは、メールアドレスがGmailのようなフリーメールプロバイダーのものかどうかをチェックします。 フリーメールでない場合、この値はfalseになります。フリーメールの場合、true
'になります。 - '
formatCheck
'は、メールアドレスにシンタックスエラーがないかを確認します。単純なタイプミスや大きなエラー見つける基本的なチェックです。エラーがなければ、この値は'false
'になります。エラーがあれば'true
'になります。
舞台裏では、APIサービスがこれらの認証を全て処理しています。これについては、今後の記事で取り上げます。
Email Verificationのカスタマイズ
上記のコードサンプルでは、可能な全ての認証メソッドでメールアドレスを認証する方法を示しました。
メール認証には時間がかかることがあります。各認証にかかる時間はわずかですが(コンマ数秒)ですが、全てのチェックを実行すると、かかる時間が増えていきます。
貴社のウェブサイトでメールが受信可能になっていることを確認する目的でメールアドレスを認証する場合、email-verifierパッケージを設定すれば、そのチェックだけを実行させることができます。email-verifierライブラリは非常に柔軟です。ニーズに応じてさまざまな種類のチェックを有効にも無効にもできます。
その仕組みは以下の通りです:
$client->get('[email protected]', [ '_hardRefresh', 'validateSMTP', ... ] )
' GET
'メソッドを実行する時に無効化すべきオプションの配列を渡すことができます(上記の通り)。オプションの無効化は、実行するチェックの種類に直接影響します。必要に応じて自由にご利用ください。
ユーザー登録フローの改善
以上、email-verifierライブラリを使用してメールアドレスを認証する方法をご覧いただきました。 こうした認証を実行するにあたり、貴社のウェブサイトの登録プロセスを変更する必要があるかもしれません。
その場合、ユーザーが登録フォームに入力して送信する際の手順を以下のようにしてください:
- ウェブサーバーでフォームデータを受け取る。
- メールアドレスを含む、ユーザーの登録データを解析する。
- email-verifierライブラリを使用して、ユーザーのメールアドレスを即座に認証する。
- メールアドレスが無効な場合、ユーザーにエラーを表示し、再試行を促す。
- 問題がなければ、ユーザーの新しいアカウントを作成し、ログインさせる。
これらのステップを踏むことで、手遅れになる前にユーザーのタイプミスや間違いを登録プロセスの早い段階で発見し、ウェブサイトの登録フローを大幅に改善することができます。
まとめ
ユーザーのメールアドレスの認証は、貴社のウェブサイトのユーザー体験を向上させるシンプルな方法です。
新しいemail-verifier は、さまざまな種類のメールアドレス認証を扱うことができる非常に柔軟なツールです。
ご質問がございましたら、こちらにメールでお問い合わせください。