経緯
表題の通り、 pear/net_dns2
の v1.5.3
を使用していて以下のエラーが発生しました。
PHP Fatal error: Uncaught Net_DNS2_Exception: DNS request failed: The name server was unable to process this query due to a problem with the name server. in /PATH/TO/PROJECT/vendor/pear/net_dns2/Net/DNS2.php:1019
Stack trace すると以下の通り。
PHP Fatal error: Uncaught Net_DNS2_Exception: DNS request failed: The name server was unable to process this query due to a problem with the name server. in /PATH/TO/PROJECT/vendor/pear/net_dns2/Net/DNS2.php:1019
Stack trace:
#0 /PATH/TO/PROJECT/vendor/pear/net_dns2/Net/DNS2/Resolver.php(172): Net_DNS2->sendPacket()
#1 /PATH/TO/PROJECT/CERTAIN_PROGRAM.php(xxx): Net_DNS2_Resolver->query()
#2 {main}
thrown in /PATH/TO/PROJECT/vendor/pear/net_dns2/Net/DNS2.php on line 1019
原因
結果的にはプログラムの問題ではなく、たまたま該当の処理に引っかかる DNS の応答がない…… DNSサーバ の設定ミスでした。
>nslookup
既定のサーバー: defaultgateway.example.jp
Address: 192.2.0.1
> server ns01.example.com
既定のサーバー: ns01.example.com
Address: 203.0.113.1
> set type=mx
> example.com
*** [203.0.113.1] が example.com を見つけられません: Server failed
ここで何かがおかしいと気付いて DNSサーバ の設定を確認。
mx.example.com. IN A mailexchange.example.co.jp
Aレコードなのに右側がIPアドレスではなくホスト名になっていました。 MXレコード のつもりで記述してしまったようです。しかも末尾のドットがないですね……。
mx.example.com. IN A 203.0.113.100
IPアドレスの記述が意図したものだったので、そのように修正しました。別途 MXレコード もきちんと設定。
>nslookup
既定のサーバー: defaultgateway.example.jp
Address: 192.2.0.1
> server ns01.example.com
既定のサーバー: ns01.example.com
Address: 203.0.113.1
> set type=mx
> example.com
example.com MX preference = 10, mail exchanger = mailexchange.example.co.jp
nslookup で MXレコード を引けるようになったことを確認して、再度プログラムを実行。
今度はエラーにならずに最後まで処理が走りました。これで原因が DNSサーバ の設定だと確信しました。
(が、実はこれの他にも原因が潜んでいたのでした……。)