現象
PHPから外部のSMTPサーバに接続して送信する処理が、ある日できなくなっていた。
調査
PHPサーバとSMTPサーバ間の疎通が取れなくなったのかなあ?
SSHでPHPサーバにログインして、pingを投げるとSMTPサーバから応答が返ってきた。
では、PHPサーバからtelnetでSMTPサーバに接続してメール送信してみる。
→送信できた。PHPサーバとSMTPサーバ間の接続は保たれている様子。
ということは、PHPだと外部サーバに接続できていない??
接続試験用プログラムを簡単に組んでみる。
<?php
// mail.hoge.comに接続できるか確認。
$fp = fsockopen("mail.hoge.com", 25, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
echo "I'm connected!<br />\n";
fclose($fp);
}
あれ?エラーになった。接続できていないみたいだ。
mail.hoge.comをIPアドレスに変えてみる。
あれ、接続できた。え?PHPからだと名前解決が出来ていないのか?
Apache再起動で解決
思い返してみると、このサーバは最近グローバルIPアドレスを変更した。
そのときに、resolv.confも変更している。
色々調べると、resolv.conf変更後はApache再起動しないといけないらしい。
再起動すると、名前解決が出来るようになった。
pingやnslookupでは名前解決できるのに、PHPからでは名前解決できない今現象。
ハマった。ハマった。