SwiftMailerでメールを送信しようとするとSSL operation failed with code 1. エラーが出る

本当はそれ以前に、ローカルの開発環境で動かしているpostfixがちゃんとgmailにメールを送信してくれるまでの紆余曲折があったのだけれど、それがちゃんと設定できてコマンドラインからのメールも送れる・・という段階になって、いざPHPからメールを送ろうとすると、こんなエラーが出ました。

 

f:id:wigwamania:20160409134803p:plain

PHP Warning – yii\base\ErrorException
stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

 ふぅむ・・・と調べること数十分。

どうやらPHP5.6以降で発生するらしく、SwiftMailerをちょこっと修正してやらないといけないみたい。

 

具体的には、まずStreamBuffer.phpというファイルを探します。

 

私はYii2というフレームワークを使っていて、vendor/swiftmailerというディレクトリにSwiftMailerをセットアップしていたので、StreamBuffer.php

vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php

にありました。

見つけたら、このファイルを編集します。

263行目辺りに、以下のような一行があります。

$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_C    LIENT_CONNECT, stream_context_create($options));

stream_socket_client」で検索すれば一発でたどり着けます。

で、この行の上に、以下の2行を記述します。

$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;

これでOK。