PHPのimap_open()でエラーになる場合の対処の1つ

PHPimap_open("{imap.example.com:143}","user","password")で以下のようなエラーが出た。

Warning: imap_open(): Couldn't open stream {imap.example.com:143} in C:\Users\admin\workspace\imap.php on line 45
Notice: Unknown: Certificate failure for imap.example.com: Server name does not match certificate: C=JP, S=Osaka, L=Osaka-shi, O="IMAP Service Inc.", OU=administrator, CN=some.example.com (errflg=2) in Unknown on line 0

1行目のエラーと2行目のエラーは無関係だと思い込んでしまい、解決までに時間がかかった。

解決方法を先に書いてしまうと、

imap_open("{imap.example.com:143/notls}","user","password");

とすればよい。

サーバーが一応TLS/SSLに対応していて自動的にTLSで接続しようとするのだが、証明書のホスト名が接続しようとしているはずのホスト名と違い、SSL証明書が不正であるためエラーとなり接続できなかった。

なので、パスワードが平分で送られるという問題があるものの、IMAPのオプションでnotlsを指定してTLSをオフにしてしまえば証明書のエラーがなくなり、サーバーに接続できるようになる。