LoginSignup
17

More than 5 years have passed since last update.

PHP5.6でSMTPのhostがsslの場合に注意!

Last updated at Posted at 2016-02-10

PHP5.6でSMTPのhostがsslの場合に注意!

問題

CakePHP2でシステムを普通に構築して、普通にSMTPでメール送信機能を実装して、リリースしたらメールが飛ばない!と連絡が。。。

ログを見ると

Error: [SocketException] stream_socket_client(): SSL operati
on failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify faile
d
stream_socket_client(): Failed to enable crypto
stream_socket_client(): unable to connect to ssl://○○.jp:465 (Unknown error)

なんかSSL周りのエラーが・・・。

実は、その直前に同一サーバに乗っている別案件で同じことが起きてて、その案件ではPHPMailerを使用していたので下記記事で対応してました。

今回はCakeEmailだったんですが、CakeEmailでは情報があまりなかったので、色々掘り返したところ。。。

原因

PHP5.6からSSL コンテキストオプションのverify_peerのデフォルト値がtrueになっています。。。

開発環境も5.6に合わせていると思ってたら5.5だったよママン・・・

このオプション、証明書の認証を必須とするオプションなんですが、ローカルに証明書を持っていないといけないっぽい。。。

SMTP情報を貰う際に証明書とか貰わないよ・・・。

CakeEmailの場合の対応策


public $smtp = array(
    'transport' => 'Smtp',
    'from' => array('site@○○.jp' => 'My Site'),
    'host' => 'ssl://○○.jp',
    'port' => 465,
    'timeout' => 30,
    'username' => 'user',
    'password' => 'secret',
    'client' => null,
    'log' => false,
    //'charset' => 'utf-8',
    //'headerCharset' => 'utf-8',
    //ここから
    'context' => array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    )
    //ここまで
);

Cookbookにも情報が見当たらなくて結局ソースから書き方を発掘しました・・・。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17