【问题标题】:Laravel - Connection could not be established with host smtp.gmail.com [ #0]Laravel - 无法与主机 smtp.gmail.com 建立连接 [#0]
【发布时间】:2015-02-27 13:02:00
【问题描述】:

我正在尝试使用本地主机的 Laravel 从 Gmail 发送电子邮件。我收到此错误:无法与主机 smtp.gmail.com 建立连接 [#0]

我正在使用端口 465 的 ssl。我也尝试了 587,但它不起作用。

我也试过this,但没用。我发现很多人遇到同样的问题,但我找到的解决方案不起作用。

【问题讨论】:

标签: laravel-4 gmail


【解决方案1】:

编者注:禁用 SSL 验证具有安全隐患。如果不验证 SSL/HTTPS 连接的真实性,恶意攻击者可以冒充一个受信任的端点(例如 GitHub 或其他一些远程 Git 主机),您将容易受到 Man-in-the-Middle Attack 的攻击。

在将其用作解决方案之前,请确保您完全了解安全问题。

在 Laravel 项目目录中,编辑 config/mail.php 并添加以下内容:

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

它对我有用。

仅供参考,我的 SMTP 设置是:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=[Full Gmail Address]
MAIL_PASSWORD=[Google App Password obtained after two step verification on Google Account Page]
MAIL_ENCRYPTION=ssl

【讨论】:

  • 我不需要流部分。区别在于两步验证后的应用密码,以及 php artisan config:cache
  • 这解决了我的问题
【解决方案2】:

编者注:禁用 SSL 验证具有安全隐患。如果不验证 SSL/HTTPS 连接的真实性,恶意攻击者可以冒充一个受信任的端点(例如 GitHub 或其他一些远程 Git 主机),您将容易受到 Man-in-the-Middle Attack 的攻击。

在将其用作解决方案之前,请确保您完全了解安全问题。

我遇到了同样的错误:无法与主机 smtp.gmail.com [#0] 建立连接,并按照此处概述的步骤操作:https://github.com/swiftmailer/swiftmailer/issues/544

尝试在 Swift/Transport/StreamBuffer.php 的第 263 行将以下几行添加到 _establishSocketConnection()

$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;

请注意,这不是一个完美的解决方案,因为它涉及:a) 攻击可能在 SwiftMailer 更新中被覆盖的核心代码,b) 由于您不再验证连接,因此会降低应用的安全性。但作为一种临时解决方法,它对我有用。

【讨论】:

  • 谢谢先生,这东西对我有用,因为我只在我的 FYP 中使用它,我不必确保它安全,所以这个解决方案工作得很好
【解决方案3】:

.env 文件中的这一行更改将使其工作

MAIL_DRIVER=sendmail

如果也没有效果尝试切换邮件端口

MAIL_PORT=587

或者

MAIL_PORT=465

仅当您在 google 帐户下启用“允许不太安全的应用程序访问”时,这才有效

【讨论】:

    【解决方案4】:

    在您的 .env 文件中,您需要设置您的电子邮件帐户的电子邮件地址和密码:

    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.gmail.com
    MAIL_PORT=587
    MAIL_USERNAME=test@gmail.com
    MAIL_PASSWORD=testpassword
    

    在mail.php中

    <?php
    
    return [
        'driver' => env('MAIL_DRIVER', 'smtp'),
        'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
        'port' => env('MAIL_PORT', 587),
        'from' => ['address' => 'yourEmail@gmail.com', 'name' => 'Your Title'],
        'encryption' => 'tls',
        'username' => env('MAIL_USERNAME'),
        'password' => env('MAIL_PASSWORD'),
        'sendmail' => '/usr/sbin/sendmail -bs',
        'pretend' => false,
    ];
    

    并清除配置缓存:

    php artisan config:cache
    

    【讨论】:

    • 直播服务器也需要用户名和密码吗?
    【解决方案5】:

    这就是我的工作

    MAIL_MAILER=smtp
    MAIL_HOST=smtp.gmail.com
    MAIL_PORT=587
    MAIL_USERNAME=<your email>
    MAIL_PASSWORD=<your app password>
    MAIL_ENCRYPTION=tls
    

    如果您使用您的帐户进行两次身份验证,则应生成新的应用密码并用于您的 env 文件。这就是我的工作。

    【讨论】:

      【解决方案6】:

      您是否尝试过将加密更改为 tls?我目前使用 Gmail SMTP 服务器从我的 Laravel 应用程序发送电子邮件。我使用 TLS 和端口 587

      【讨论】:

      • 这对我有用!当我在 windows 中使用 apache 时,我需要把 tls.所以可能是 ssl 配置问题。
      【解决方案7】:

      在 localhost 你可以设置你的 MAIL_DRIVER=smtp 但在像 cpanel 这样的真实服务器上你必须设置 MAIL_DRIVER=sendmail 并编辑你的 config/mail.php '默认' => env('MAIL_MAILER', 'sendmail'), 但这不是一个好主意,因为在您在 google 上发送邮件后,您会在 gmail 上收到如下错误:

      小心这条信息 Gmail 无法验证它是否确实来自 tenetup.reminderme@gmail.com。避免点击链接、下载附件或回复个人信息。

      【讨论】:

        【解决方案8】:

        将 .env 和 mail.php 中的邮件驱动程序更改为 MAIL_DRIVER=mailgun

        【讨论】:

          猜你喜欢
          • 2018-07-03
          • 2016-12-13
          • 1970-01-01
          • 2016-02-07
          • 2021-01-04
          • 2017-12-08
          • 1970-01-01
          • 1970-01-01
          • 2019-03-01
          相关资源
          最近更新 更多