phpmailer傳送郵件出現錯誤:stream_socket_enable_crypto():SSLoperationfailedwithcode1.

suboysugar發表於2017-08-27

如果開了除錯,除錯進去會看到錯誤提示:

 

[cpp] view plain copy
 
  1. smtp_code:“stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
    error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed”  

最終提示是:Could not connect to SMTP host

 

原因是升到php5.6後預設開啟驗證

新增引數,去掉驗證:

 

[php] view plain copy
 
  1. $mail->SMTPOptions = array(  
  2.     `ssl` => array(  
  3.         `verify_peer` => false,  
  4.         `verify_peer_name` => false,  
  5.         `allow_self_signed` => true,  
  6.     )  
  7. )  

 

 

參考文件:

http://php.net/manual/en/context.ssl.php

去掉驗證:

I am unable to load a PEM that was generated with the stunnel tools. However, I am able to use PHP calls to generate a working PEM that is recognized both by stunnel and php, as outlined here:

http://www.devdungeon.com/content/how-use-ssl-sockets-php

This code fragment is now working for me, and with stunnel verify=4, both sides confirm the fingerprint. Oddly, if “tls://” is set below, then TLSv1 is forced, but using “ssl://” allows TLSv1.2:

$stream_context = stream_context_create([ `ssl` => [
`local_cert`        => `/path/to/key.pem`,
`peer_fingerprint`  => openssl_x509_fingerprint(file_get_contents(`/path/to/key.crt`)),
`verify_peer`       => false,
`verify_peer_name`  => false,
`allow_self_signed` => true,
`verify_depth`      => 0 ]]);

$fp = stream_socket_client(`ssl://ssl.server.com:12345`,
   $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $stream_context);
fwrite($fp, “foo bar
“);
while($line = fgets($fp, 8192)) echo $line;

 

http://php.net/manual/en/context.ssl.php

如何聯絡我:【萬里虎】www.bravetiger.cn
【QQ】3396726884 (諮詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/


相關文章