Web開発では、メールボックスの確認は一般的で重要な機能です。ユーザー登録、パスワードの回復、またはその他のシナリオであろうと、ユーザーが提供する電子メールアドレスが有効かどうかを確認すると、システムのセキュリティとユーザーエクスペリエンスが効果的に改善される可能性があります。広く使用されているサーバー側のプログラミング言語として、PHPはgetMXRR関数が非常に便利なツールであるメールボックス検証に複数のメソッドを提供します。この記事では、 getMXRR関数を使用して、シンプルで効果的なメールボックス検証メカニズムを実装する方法を紹介します。
getMXRRは、指定されたドメイン名のメール交換(MX)レコードを取得するためのPHPに組み込み関数です。 MXレコードは、メールサーバーのホスト名を指定するDNS(ドメイン名システム)のレコードです。 getMXRR関数を介してドメイン名のMXレコードを取得すると、ドメイン名にメールを受信できるサーバーがあることを意味するため、メールボックスが有効かどうかを判断するのに役立ちます。
関数プロトタイプ:
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">getmxrr</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hostname</span></span><span> , </span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$mxhosts</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$weight</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span> ] )
</span></span>
パラメーター説明:
$ hostname :クエリのドメイン名、通常はメールアドレスのドメイン名部分。
$ mxhosts :ドメイン名に関連するメール交換サーバーのリストを含む結果アレイを返します。
$ weight (オプション):メール交換サーバーの優先配列。
電子メールの確認は、通常、構文検証とドメイン名の検証の2つのステップに分けられます。
構文検証: @シンボルが含まれているかどうか、標準のメールボックス形式を満たしているかどうかなど、メールボックスの形式が正しいかどうかを確認します。
ドメイン名の確認:メールボックスのドメイン名部分に有効なMXレコードがあるかどうかを確認して、メールボックスのドメイン名が電子メールを受信できるかどうかを確認します。
getMXRR関数は、2番目のステップ - ドメイン名の確認を完了するのに役立ちます。
getMXRR関数を使用して、メールボックスのドメイン名部分に有効なメールサーバーがあるかどうかを確認します。メールボックスの確認を実装するための例コードは次のとおりです。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">isValidEmail</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$email</span></span></span><span>) {
</span><span><span class="hljs-comment">// 正規表現を使用してメールボックス形式を確認します</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$email</span></span><span>, FILTER_VALIDATE_EMAIL)) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
}
</span><span><span class="hljs-comment">// メールアドレスのドメイン名部分を取得します</span></span><span>
</span><span><span class="hljs-variable">$domain</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-title function_ invoke__">strrchr</span></span><span>(</span><span><span class="hljs-variable">$email</span></span><span>, </span><span><span class="hljs-string">"@"</span></span><span>), </span><span><span class="hljs-number">1</span></span><span>);
</span><span><span class="hljs-comment">// 使用getmxrrドメイン名を取得しますMX記録</span></span><span>
</span><span><span class="hljs-variable">$mxhosts</span></span><span> = [];
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">getmxrr</span></span><span>(</span><span><span class="hljs-variable">$domain</span></span><span>, </span><span><span class="hljs-variable">$mxhosts</span></span><span>)) {
</span><span><span class="hljs-comment">// 正常に取得できる場合MX記録,これは、電子メールドメイン名が有効であることを意味します</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// 取得できない場合MX記録,電子メールドメイン名が無効であることを示します</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
}
}
</span><span><span class="hljs-comment">// メールをテストします</span></span><span>
</span><span><span class="hljs-variable">$email</span></span><span> = </span><span><span class="hljs-string">"[email protected]"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">isValidEmail</span></span><span>(</span><span><span class="hljs-variable">$email</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"電子メールは有効です"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"無効なメール"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
filter_var($ email、filter_validate_email) :最初に、 filter_var関数を介してメールボックスの構文チェックを実行します。メールボックス形式が正しくない場合、関数はfalseを返します。
substr(strrchr($ email、 " @")、1) : strrchr関数を使用して、メールボックスのドメイン名パーツ(つまり、 @シンボルの後の部分)を取得し、 subststrを使用して@シンボルを削除して純粋なドメイン名を取得します。
getMXRR($ domain、$ mxhosts) : getMXRR関数を使用して、ドメイン名のMXレコードを取得します。 trueが返された場合、ドメイン名が有効であり、メールを受信できることを意味します。 falseが返された場合、ドメイン名にメールサーバーがなく、メールボックスが無効であることを意味します。
ドメイン名の検証のみ: getMXRRは、メールボックスのドメイン名部分に有効なメールサーバーがあるかどうかを確認でき、メールボックスの特定のユーザーが存在するかどうかを確認できないことに注意する必要があります。たとえば、 [email protected]のドメイン名部分が有効な場合、 [email protected]のメールアカウントが存在するという意味ではありません。
キャッシュの問題:一部のDNSサーバーは、MXレコードをキャッシュする場合があります。メールボックスのMXレコードが特定の特別な状況下で変更されている場合、更新には一定の時間がかかる場合があります。したがって、 getMXRRは、メールボックスドメイン名が存在するかどうかを効果的に確認できますが、リアルタイムを保証するものではありません。
乱用の防止:メールボックスの確認を実装するときは、 getMXRR関数を頻繁に呼び出すことを避けないようにすることをお勧めします。これにより、DNSサーバーの負担が増加し、サーバーが虐待者と見なされる可能性があります。
メールボックス検証にgetMXRR関数を使用することは、シンプルで効率的な方法です。これにより、開発者は、メールボックスドメイン名パーツのMXレコードをチェックすることにより、メールボックスが有効かどうかを判断するのに役立ちます。電子メールアカウント自体の存在を確認することはできませんが、ほとんどのシナリオでは、ドメイン名の検証はニーズを満たすのに十分です。実際のアプリケーションでは、構文の検証とドメイン名の確認を組み合わせることで、メールボックスの検証の精度を効果的に改善し、スパムと無効なメールボックス登録を回避できます。