【问题标题】:SwiftMailer - PHP - How to disable ssl certificate validationSwiftMailer - PHP - 如何禁用 ssl 证书验证
【发布时间】:2016-07-27 01:55:00
【问题描述】:

出于开发目的,我需要禁用 ssl 证书的验证,但我在官方文档中没有找到任何相关信息。 http://swiftmailer.org/docs/introduction.html

我正在使用 php 5.6 和 Symfony2 (v2.7)。

SwiftMailerBundle的配置参考为:

swiftmailer:
   transport:            smtp
   username:             ~
   password:             ~
   host:                 localhost
   port:                 false
   encryption:           ~
   auth_mode:            ~
   spool:
      type:                 file
      path:                 '%kernel.cache_dir%/swiftmailer/spool'
   sender_address:       ~
   antiflood:
      threshold:            99
      sleep:                0
   delivery_address:     ~
   disable_delivery:     ~
   logging:              '%kernel.debug%'

【问题讨论】:

标签: php symfony ssl ssl-certificate swiftmailer


【解决方案1】:

我发现了一个未记录的功能

symfony 2.8、php 5.6、swiftmailer-bundle 2.5.3

Swiftmailer 配置

swiftmailer:
   stream_options:
    ssl:
        verify_peer: false
        verify_peer_name: false

【讨论】:

  • 也适用于 Symfony 3.3、Swiftmailer-bundle 3.1.6 和 php 7.1
  • 使用 Symfony 3.3、Swiftmailer-bundle 3.1.6 和 php 7.1 的“swiftmailer”下无法识别的选项“stream_options”
  • 确认在 Symfony 4.0.10 上工作!我已经为此苦苦挣扎了将近两个小时 D:我怀疑我的 SMTP 服务器 SSL 证书设置不正确,但至少我现在可以继续开发:D
  • 如果您使用多个邮件程序,stream_options 必须放在适当的邮件程序键下(与任何其他选项一样)
【解决方案2】:

Maxim 建议的配置选项对我不起作用(Symfony 3.4 和 Swift Mailer 5.4)

我能找到的最干净的解决方案如下:

$transport = $mailer->getTransport();
if($transport instanceof \Swift_Transport_EsmtpTransport){
    $transport->setStreamOptions([
        'ssl' => ['allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false]
    ]);
}

$mailer 是您在某些服务或控制器中使用的 SwiftMailer 实例

【讨论】:

    【解决方案3】:

    我认为这是一个肮脏的黑客,但它对我来说很好;)

    $https['ssl']['verify_peer'] = FALSE;
    $https['ssl']['verify_peer_name'] = FALSE; // seems to work fine without this line so far
    /** @var \Swift_Transport_EsmtpTransport $transport */
    $transport = $this->get('swiftmailer.mailer.default.transport');
    $transport->setStreamOptions($https);
    

    【讨论】:

      【解决方案4】:

      从 Symfony 获取 swiftmailer.mailer.default.transport 并设置以下配置对我有用:

      $transport = $this->get("swiftmailer.mailer.default.transport");
      
      // disable SSL certificate validation
      $transport->setStreamOptions(array('ssl' => array('allow_self_signed' => true, 'verify_peer' => false)));
      

      我认为无法在 .yml 文件中设置流选项。

      【讨论】:

        猜你喜欢
        • 2018-07-09
        • 1970-01-01
        • 2018-08-07
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        相关资源
        最近更新 更多