PHPでメールアドレスを検査するWindowsアプリを開発

(1/1)
PHP で正しいメールアドレスかどうか調べる」で作った PHP プログラムを Windows アプリに改造する。

サンプル・プログラム

プログラムの解説:DNS問い合わせ

PHP で正しいメールアドレスかどうか調べる」では MX レコードを求めるのに組み込み関数  getmxrr  を使ったが、PHP バージョン 4 では Windows用に実装されていない。
そこで、PEAR::Net_DNS を使うことにする。

この PEAR パッケージは癖があり、今回は Net_DNS 1.0.1 を利用することにする。

0025: /**
0026:  * getmxrrの代替関数
0027:  * @param string $hostname  ホスト名
0028:  * @param string $mxhosts   見つかったMXレコードのリスト
0029:  * @return string エラーメッセージ/'':成功
0030: */
0031: function my_getmxrr($hostname, &$mxhosts) {
0032:     $resolver = new Net_DNS_Resolver();
0033:     $resolver->nameservers = array(
0034:         '8.8.8.8' ,'129.250.35.250'                //Google DNS
0035:     );
0036:     $resolver->retry   = 2;       //リトライ秒数
0037:     $resolver->retrans = 3;       //リトライ回数
0038:     if ($resolver->query('google.com') == FALSE) {
0039:         return 'ネームサーバにアクセスできません';
0040:     }
0041: 
0042:     //MXレコード検査
0043:     $response = $resolver->query($hostname, 'MX');
0044:     if ($response) {
0045:         foreach ($response->answer as $rr) {
0046:             $mxhosts[] = $rr;
0047:         }
0048:         if (count($response->additional)) {
0049:             foreach ($response->additional as $rr) {
0050:                 $mxhosts[] = $rr;
0051:             }
0052:         }
0053:         $res = '';
0054:     } else {
0055:         $res = 'MXレコードがありません';
0056:     }
0057:     unset($resolver);
0058: 
0059:     return $res;
0060: }

オリジナルの関数  getmxrr  とは異なり、エラーメッセージを返すようにしている。
というのは、Linux ではデフォルト・リゾルバを参照するのだが、Windows ではうまく動かないことがあるようなので、強制的に Google DNS を参照するように定義している。そして、 "google.com" が解釈できなければ、ネットに接続していないという判断を加えた。

コンパイル

PHPでWindowsアプリを開発する
コンパイルは「PHP で bamcompile を使って EXE プログラムを生成」で紹介したのと同じ手順で、bamcompile.exe を使ってプロジェクトファイル "checkmailwin.bcp" をコンパイルする。

コマンドラインから "bamcompile checkmailwin.bcp" を実行する。コンパイルが完了すると、"checkmailwin.exe" が生成されている。
"checkmailwin.exe" は、DLL 不要で、単独で動作する EXE プログラムである。

参考サイト

(この項おわり)
header