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


相关文章
|
安全 网络安全
Foxmail邮箱提示错误:ssl连接错误,errorCode:5解决方法
Foxmail邮箱提示错误:ssl连接错误,errorCode:5解决方法
2480 0
|
Linux 网络安全 开发工具
Centos 7下如何配置SMTP SSL(邮箱发送功能)
Centos 7下如何配置SMTP SSL(邮箱发送功能)
1678 0
Centos 7下如何配置SMTP SSL(邮箱发送功能)
|
7月前
|
网络安全 数据安全/隐私保护
JavaMail给QQ邮箱发邮件报错,没有SSL加密
JavaMail给QQ邮箱发邮件报错,没有SSL加密
|
28天前
|
安全 网络安全 数据安全/隐私保护
SSL/TLS证书**是一种用于加密网络通信的数字证书
SSL/TLS证书**是一种用于加密网络通信的数字证书
79 6
|
8天前
|
存储 监控 安全
告别手动续签烦恼:一键实现免费SSL证书自动更新
告别手动续签烦恼,一键实现免费SSL证书自动更新。通过自动化续签过程,减少人为错误,提高安全性,节省时间,确保网站始终提供安全、可信的服务。选择支持自动续签的证书颁发机构,并配置相应的工具,轻松管理SSL证书。
|
9天前
|
安全 应用服务中间件 网络安全
实战经验分享:利用免费SSL证书构建安全可靠的Web应用
本文分享了利用免费SSL证书构建安全Web应用的实战经验,涵盖选择合适的证书颁发机构、申请与获取证书、配置Web服务器、优化安全性及实际案例。帮助开发者提升应用安全性,增强用户信任。
|
1月前
|
算法 安全 网络安全
阿里云SSL证书双11精选,WoSign SSL国产证书优惠
2024阿里云11.11金秋云创季活动火热进行中,活动月期间(2024年11月01日至11月30日)通过折扣、叠加优惠券等多种方式,阿里云WoSign SSL证书实现优惠价格新低,DV SSL证书220元/年起,助力中小企业轻松实现HTTPS加密,保障数据传输安全。
584 3
阿里云SSL证书双11精选,WoSign SSL国产证书优惠
|
22天前
|
存储 安全 算法
阿里云平台WoSign SSL证书,轻量化助力网站安全合规
阿里云WoSign SSL品牌证书可通过SSL/TLS协议的加密认证机制,建立安全的网络连接并校验通信方的真实身份,从而实现网络传输的保密性、完整性,确保通信双方身份可信。部署证书文件到服务器端,帮助等保二级及以上信息系统以及关键信息基础设施信息系统,履行等保安全通信设计技术要求,轻量化助力网站数据传输安全合规建设。
169 2
|
25天前
|
网络协议 应用服务中间件 网络安全
小白必看:阿里云SSL证书免费申请流程,免费3个月到期解决方法
2024年阿里云提供免费SSL证书申请服务,品牌为Digicert,支持免费单域名证书,每个账号可申请20张,有效期3个月。用户需登录阿里云数字证书管理服务控制台,完成证书申请、域名绑定及DNS验证等步骤,操作简便快捷。更多详情见阿里云官网。
|
1月前
|
算法 安全 数据建模
阿里云SSL证书限时优惠,WoSign DV证书220元/年起
2024年11月01日至11月30日,阿里云SSL证书限时优惠,部分证书产品新老同享75折起;阿里云用户通过完成个人或企业实名认证,还可领取不同额度的满减优惠券!通过优惠折扣、叠加满减优惠券等多种方式,阿里云WoSign SSL证书将实现优惠价格新低,DV SSL证书220元/年起!
618 5
阿里云SSL证书限时优惠,WoSign DV证书220元/年起