今天手賤將Jenkins服務(wù)器從10.11升級(jí)為10.12懊亡,馬上就踩坑了依啰。PHPMail報(bào)錯(cuò)
Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting+
意思很明顯,連不上SMTP服務(wù)器啦店枣,而且還指引你上github看解決方案速警,太貼心了。上去github上面鸯两,嘗試將ssl改為tls闷旧,也不行,這次的報(bào)錯(cuò)很神奇
Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /Users/tanzhiyuan/Documents/Jenkins_tools/PHPMailer/class.smtp.php on line 344
Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Warning看上去是個(gè)線索钧唐,再次google一番忙灼,找到了一篇很好用的文章
https://github.com/composer/composer/issues/3346
里面提到,首先看看你的php版本
php -v
PHP 5.6.24 (cli) (built: Aug 8 2016 16:58:37)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
tanzhiyuandeMac-mini:PPStocks tanzhiyuan$ openssl version
OpenSSL 0.9.8zh 14 Jan 2016
可以看到mac10.12比mac10.11是升級(jí)了PHP的版本钝侠,在mac10.11下是這樣的
php -v
PHP 5.5.36 (cli) (built: May 29 2016 01:07:06)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
應(yīng)該問題就出在了php版本升級(jí)上面了该园。進(jìn)一步會(huì)發(fā)現(xiàn)
php -r "openssl_get_cert_locations();"
這句命令,在mac10.12和mac10.11下是不同的輸出帅韧,mac10.11下直接出錯(cuò)爬范,表示不支持這個(gè)函數(shù),應(yīng)該就是說(shuō)mac10.11下的php用的SSL證書是跟隨系統(tǒng)的弱匪,在mac10.12下是如下輸出
Array
(
[default_cert_file] => /usr/local/libressl/etc/ssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/local/libressl/etc/ssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/local/libressl/etc/ssl/private
[default_default_cert_area] => /usr/local/libressl/etc/ssl
[ini_cafile] =>
[ini_capath] =>
)
好青瀑,結(jié)果很明顯璧亮,替換掉/usr/local/libressl/etc/ssl/cert.pem即可。
wget http://curl.haxx.se/ca/cacert.pem
sudo mv cacert.pem /usr/local/libressl/etc/ssl/cert.pem
會(huì)說(shuō)mv失敗斥难,因?yàn)槟居性撃夸浿λ唬@個(gè)時(shí)候手動(dòng)創(chuàng)建即可。PHPMailer又能歡快地跑起來(lái)了哑诊,不過實(shí)測(cè)發(fā)現(xiàn)使用smtp.qq.com是能正常發(fā)信的群扶,但是用smtp.163.com就不行了,估計(jì)還是哪里有坑镀裤,不過并不重要了竞阐。