【问题标题】:stream_socket_enable_crypto(): Peer certificate CN=`cs723.mojohost.com' did not match expected CN=`smtp.sendgrid.net'stream_socket_enable_crypto():对等证书 CN=`cs723.mojohost.com' 与预期的 CN=`smtp.sendgrid.net' 不匹配
【发布时间】:2017-05-24 01:39:11
【问题描述】:

我们正在尝试向新成员发送自动回复电子邮件。我们在同一台服务器上的其他站点上使用相同的配置,没有问题。发送邮件后返回以下错误:

stream_socket_enable_crypto():对等证书 CN=cs723.mojohost.com 与预期不匹配 CN=smtp.sendgrid.net

https://gyazo.com/ffb0cb7645d51ed21ecc863f1e3196b2

我们使用 Laravel 连接到: smtp.sendgrid.net 港口 - 587 使用 TLS 加密

我们尝试了以下方法,但没有成功:

此外,我们无法通过 PUTTY 进行连接。我们用 MojoHost 验证了 SSH 权限是正确的。

我在另一篇文章中读到

解决此问题的正确方法是用一个好的证书替换无效、配置错误或自签名的证书。

尝试过也没有成功。希望有人可以提供一些有用的见解。持续一周的时间试图解决这个问题......

谢谢, 迈克

【问题讨论】:

    标签: php email


    【解决方案1】:

    如果您使用的是非 SSL 设置,请尝试通过删除 \config/mail.php 中的“tls”来取消加密

    '加密' => env('MAIL_ENCRYPTION', ''),

    【讨论】:

    • 我们已经尝试过了,但没有成功。我们已经离开了 SendGrid。
    【解决方案2】:

    在方法createSmtpDriver from

    \vendor\laravel\framework\src\Illuminate\Mail\TransportManager.php

    它从

    获取密钥流

    \config\mail.php

    稍后用作内部stream_context_create方法的自定义选项

    \vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php.

    因此,要设置密钥 verify_peer、verify_peer_name 和 allow_self_signed 以解决 OP 提到的错误,您可以将以下内容添加到 \config\mail.php:

    'stream' => [
        'ssl' => [
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true,
        ],
    ],
    

    【讨论】:

    • 这是一种不好的做法。
    【解决方案3】:

    很多人升级到 PHP 5.6+ 时遇到以下错误:

    ErrorException: 发送到 [email address] 的电子邮件失败:stream_socket_enable_crypto(): Peer certificate CN=[hostname]' 与预期的 CN=[target hostname]' 不匹配 - library/Zend/Mail/Protocol/Smtp.php:206

    从 PHP 5.6 开始,默认启用对等验证 (http://php.net/manual/en/migration56.openssl.php)。

    如果您正在运行 WHM 或 Plesk,我发现问题可以通过以下方式解决:

    WHM:将“将传出 SMTP 限制为 root、exim 和 mailman (FKA SMTP Tweak)”从“开”更改为“关”。

    Plesk:使用设置为服务器主机地址的 URL 创建一个新订阅,然后通过 Let encrypt 插件为其分配 SSL 证书。

    【讨论】:

      【解决方案4】:

      从 WHM 中禁用“SMTP 限制”。

      就上下文而言,如果您不使用 WHM/Cpanel 进行服务器管理,这将不适用于您。如果您这样做,在左侧导航菜单的 WHM 中,只需键入“SMTP”,您就会看到 SMTP 限制是结果的首选。点击它,有一个禁用/启用切换按钮。

      【讨论】:

      • 您能否为您的答案添加更多上下文?
      • 感谢这工作! @marcogmonteiro 对于上下文,如果您不使用 WHM/Cpanel 进行服务器管理,这将不适用于您。如果您这样做,在左侧导航菜单的 WHM 中,只需键入“SMTP”,您就会看到 SMTP 限制是结果的首选。点击它,有一个禁用/启用切换按钮。
      • @MichaelFalciglia 谢谢,将其添加到答案中,以便其他人可以更轻松地找到它。
      【解决方案5】:

      对于 laravel,在 .env 文件中添加此行以取消设置邮件加密

      MAIL_ENCRYPTION = NULL
      

      【讨论】:

        【解决方案6】:

        对于在 cpanel 使用邮件托管的人,您可以使用我的解决方案。我已经尝试过,它可以在不更改 config\mail.php 中的任何内容的情况下工作,如 Chaibi Alaa 回答所述。

        所以我的应用程序架构来自 GCP 的 VM 实例 -> CloudFlare -> 邮件托管(基于 CPANEL)。问题来自于认证

        CN=`*.abc' did not match expected CN=`mail.def.com'
        

        所以我没有更改供应商代码,而是尝试绕过 cloudflare。所以我直接指出邮件托管 DNS。

        这是我的配置示例

        MAIL_DRIVER=smtp
        MAIL_HOST=mailhosting.com
        MAIL_PORT=465
        MAIL_USERNAME="noreply@def.com"
        MAIL_PASSWORD="password"
        MAIL_ENCRYPTION=ssl
        

        在我的情况下它有效,希望它可以帮助面临同样问题的其他人。请记下,我总是试图避免解决方法(通过更改供应商代码->可能有害,除非您知道自己在做什么,否则后果自负)

        如果您使用Roundcube,您可以在Mail Client Manual Settings 中找到您的MAIL_HOST

        【讨论】:

          猜你喜欢
          • 2019-05-27
          • 2018-01-05
          • 1970-01-01
          • 2016-01-07
          • 2019-12-17
          • 2016-12-07
          • 1970-01-01
          • 1970-01-01
          • 2012-11-06
          相关资源
          最近更新 更多