laravel5发送ssl邮箱问题

简介:

laravel5已经有很好的邮件发送功能,但都是常规 tls 不加密协议,现在有的云服务器已经慢慢禁止使用不加密协议,要求使用ssl加密协议;如阿里云新购买的服务器都开始禁止。


由于laravel5默认使用的是 swiftmailer 扩展。发送使用的是 stream 其中并未对ssl提供证书等内容配置,所以当使用ssl时又未指定证书时会错:

Connection could not be established with host *******.com [ #0]

连接失败,造成错误的地方:vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php 类

Swift_Transport_StreamBuffer 的 _establishSocketConnection 方法在调用 stream_context_create 时缺少证书相关配置。

看看PHP官方文档:http://php.net/manual/zh/context.ssl.php


wKiom1nbHRLBV0JdAADsz4MC7Do148.png

其中需要注意的是 verify_peer_name 要求验证证书名默认值为true,这里是问题所以,当没有指定证书时该值会影响连接验证失败导致整个连接失败。因此需要修改代码并把 verify_peer_name 设置为 false。

这个问题在 https://github.com/swiftmailer/swiftmailer/issues/544 中已经有说明。

但其增加了两行代码把 verify_peer 和 verify_peer_name 都设置为false 。依文档中看,verify_peer 默认值已经是 false ,所以可以不加。

修改代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
     /**
      * Establishes a connection to a remote server.
      */
     private  function  _establishSocketConnection()
     {
         $host  $this ->_params[ 'host' ];
         if  (! empty ( $this ->_params[ 'protocol' ])) {
             $host  $this ->_params[ 'protocol' ]. '://' . $host ;
         }
         $timeout  = 15;
         if  (! empty ( $this ->_params[ 'timeout' ])) {
             $timeout  $this ->_params[ 'timeout' ];
         }
         $options  array ();
         if  (! empty ( $this ->_params[ 'sourceIp' ])) {
             $options [ 'socket' ][ 'bindto' ] =  $this ->_params[ 'sourceIp' ]. ':0' ;
         }
         
         //在这里增加代码,修改默认值
         $options [ 'ssl' ][ 'verify_peer_name' ] = FALSE;
         
         $this ->_stream = @stream_socket_client( $host . ':' . $this ->_params[ 'port' ],  $errno $errstr $timeout , STREAM_CLIENT_CONNECT, stream_context_create( $options ));
         if  (false ===  $this ->_stream) {
             throw  new  Swift_TransportException(
                 'Connection could not be established with host ' . $this ->_params[ 'host' ].
                 ' [' . $errstr . ' #' . $errno . ']'
                 );
         }
         if  (! empty ( $this ->_params[ 'blocking' ])) {
             stream_set_blocking( $this ->_stream, 1);
         else  {
             stream_set_blocking( $this ->_stream, 0);
         }
         stream_set_timeout( $this ->_stream,  $timeout );
         $this ->_in = & $this ->_stream;
         $this ->_out = & $this ->_stream;
     }

当然如果把 verify_peer 加上也没有问题。

本文转自  ttlxihuan    51CTO博客,原文链接:http://blog.51cto.com/php2012web/1970918


相关文章
|
8月前
|
安全 网络安全
Foxmail邮箱提示错误:ssl连接错误,errorCode:5解决方法
Foxmail邮箱提示错误:ssl连接错误,errorCode:5解决方法
1769 0
|
Linux 网络安全 开发工具
Centos 7下如何配置SMTP SSL(邮箱发送功能)
Centos 7下如何配置SMTP SSL(邮箱发送功能)
1531 0
Centos 7下如何配置SMTP SSL(邮箱发送功能)
|
1月前
|
网络安全 数据安全/隐私保护
JavaMail给QQ邮箱发邮件报错,没有SSL加密
JavaMail给QQ邮箱发邮件报错,没有SSL加密
28 0
|
6天前
|
安全 网络安全
如何给网站添加ssl安全证书
如何给网站添加ssl安全证书
16 1
|
1月前
|
安全 搜索推荐 数据建模
解决网站“不安全”、“不受信”、“排名下降”,你需要——「SSL证书」
SSL证书是网络安全的关键,用于加密和验证网站身份,保护用户数据安全,防止信息被窃取。它分为DV、OV、EV和IV四种类型,每种验证网站身份的程度不同。DV证书快速签发,OV和EV证书提供更高级别的身份验证,EV证书曾在浏览器地址栏显示绿色。目前,DV证书占据市场大部分份额。SSL证书还有单域、通配符和多域之分,有效期曾从多年逐渐缩短至90天,以增强安全性。部署SSL证书能提升用户信任,优化SEO排名,并符合网络安全法规要求。
解决网站“不安全”、“不受信”、“排名下降”,你需要——「SSL证书」
|
1月前
|
存储 算法 安全
ssl 证书名词解释--crt和pem
ssl 证书名词解释--crt和pem
129 0
|
1月前
|
Linux 应用服务中间件 网络安全
linux ssl 证书 --本地制作数字证书并进行程序的数字签名
linux ssl 证书 --本地制作数字证书并进行程序的数字签名
34 0
|
7天前
|
安全 网络安全 Windows
【Azure App Service】遇见az命令访问HTTPS App Service 时遇见SSL证书问题,暂时跳过证书检查的办法
在访问App Service的KUDU工具或使用`az webapp deploy`时遇到SSL错误:`SSL: CERTIFICATE_VERIFY_FAILED`。解决方法是临时禁用Azure CLI的SSL验证。在PowerShell中,设置`$env:ADAL_PYTHON_SSL_NO_VERIFY`和`$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION`为1;在Windows命令提示符中,使用`set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1`。注意,这可能引入安全风险,应仅在必要时使用。
|
25天前
|
云安全 算法 数据建模
阿里云SSL证书免费版申请流程,收费版证书收费标准及证书类型选择参考
SSL证书是实现网站https访问必须购买的云安全类产品,现在很多用户在网站做好之后,下一步通常都是给网站域名购买SSL证书实现网站的https访问,阿里云提供申请SSL证书服务,现在每个阿里云个人或企业用户(以实名认证为准)每年可以一次性申请20张免费Digicert DV单域名试用证书(以下简称免费证书),本文为大家介绍具体的申请流程和收费证书的最新收费标准以及不同种类的证书选择参考。
阿里云SSL证书免费版申请流程,收费版证书收费标准及证书类型选择参考
|
1月前
|
安全 小程序 网络安全
阿里云腾讯云免费SSL证书托管系统的开发初衷
由于Google等公司推动,互联网安全趋势将SSL证书期限统一缩短至3个月,阿里云和腾讯云相继跟进。对于管理多个站点的小公司而言,手动维护变得繁琐。为自动化此过程,作者探索使用API解决方案。通过研究腾讯云API,成功实现证书的自动创建、审核和下载。为应对无免费到期提醒服务,作者创建计划任务,在证书到期前7天发送提醒,初期采用短信提醒,并增设公众号模板消息作为备选方案,完成到期提醒系统的构建。接下来的文章将讨论SSL证书的申请和下载流程。
57 2