【php】imap関数でSSLありの接続ができない(Network is unreachableなど)
問題
imap関数のimap_open()で、GmailのメールサーバーにSSLありで接続しようとすると、以下のようなエラーが発生する。
imap_open("{pop.googlemail.com:995/pop3}INBOX", 'account', 'password');
↓
PHP Notice: Unknown: Can't connect to googlemail-pop.l.google.com,995: Network is unreachable (errflg=2) in foo.php on line 123
答え
まずSSLありならば /ssl を追加する。
imap_open("{pop.googlemail.com:995/pop3/ssl}INBOX", 'account', 'password');
さらに、証明書の確認が入るようなのだが、
pop.googlemail.com は googlemail-pop.l.google.com のCNAMEで、証明書のドメインは googlemail-pop.l.google.com はだからか、pop.googlemail.com でSSLするのは証明書を確認すると却下される。
PHP Notice: Unknown: Certificate failure for googlemail-pop.l.google.com: Server name does not match certificate: /C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.googlemail.com (errflg=2) in Unknown on line 123
正式なホスト名を使用するか、
imap_open("{googlemail-pop.l.google.com:995/pop3/ssl}INBOX", 'account', 'password');
証明書の確認をスキップしてもらうとよいみたい。
imap_open("{pop.googlemail.com:995/pop3/ssl/novalidate-cert}INBOX", 'account', 'password');
自己証明の証明書を使う時にも /ssl/novalidate-cert でいける。
コメント