SwiftMailer - PHP - 如何禁用SSL证书验证

8
我需要禁用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%'

1
请查看 https://github.com/swiftmailer/swiftmailer/issues/571 。您可能需要升级Swift到最新版本并按照其指示进行操作。 - apokryfos
4个回答

19

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

使用symfony 2.8、php 5.6和swiftmailer-bundle 2.5.3

Swiftmailer配置

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

2
还支持Symfony 3.3,Swiftmailer-bundle 3.1.6和php 7.1。 - Fuujin
2
在Symfony 3.3,Swiftmailer-bundle 3.1.6和php 7.1下,“swiftmailer”中的“stream_options”选项未被识别。 - alexeevyci
确认在Symfony 4.0.10上工作正常!我为此苦苦挣扎了近两个小时 D: 我怀疑我的SMTP服务器SSL证书没有正确设置,但至少现在我可以继续开发了 :D - vahanpwns
如果您正在使用多个邮件程序,则必须将stream_options放置在适当的邮件程序密钥下(就像任何其他选项一样)。 - Atan

8

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);

1
从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文件中设置流选项是可能的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接