【问题标题】:Can't send email Laravel无法发送电子邮件 Laravel
【发布时间】:2018-07-08 17:27:04
【问题描述】:

我在用户注册后尝试发送电子邮件,但收到错误消息:

无法与主机 smtp.gmail.com 建立连接 [连接超时 #110]

我使用的是 Ubuntu 16.04 服务器。本地主机上一切正常。
命令

openssl s_client -connect google.com:443 -tls1_2

返回OK,所以我猜是打开587端口发送邮件。
我的.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=***@gmail.com
MAIL_PASSWORD=*** //(not the same as I used on local machine)
MAIL_ENCRYPTION=tls

config\mail.php:

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),

    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),

    'port' => env('MAIL_PORT', 587),

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', '***@gmail.com'),
        'name' => env('MAIL_FROM_NAME', '***'),
    ],

    'encryption' => env('MAIL_ENCRYPTION', 'tls'),

    'username' => env('MAIL_USERNAME'),

    'password' => env('MAIL_PASSWORD'),

    'sendmail' => '/usr/sbin/sendmail -bs',

    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];

EDIT#1:我也有连接问题。在尝试播种时

public function run()
    {
        $defaultUser = User::create([
            'name' => 'user',
            'email' => 'user@mail.com',
            'password' => bcrypt('123123'),
            'verified' => 1
        ]);

        $defaultAdmin = User::create([
            'name' => 'admin',
            'email' => 'admin@mail.com',
            'password' => bcrypt('123123'),
            'verified' => 1
        ]);

        $userRole = Role::create([
            'name' => 'user',
            'display_name' => 'user',
            'description' => 'user',
        ]);

        $adminRole = Role::create([
            'name' => 'admin',
            'display_name' => 'admin',
            'description' => 'admin',
        ]);

        $defaultUser->attachRole($userRole); //zizaco-entrus RBAC package
        $defaultAdmin->attachRole($adminRole);
    }

$defaultUser 种子(我有一个事件在用户存储后触发并向他发送验证邮件)。我收到一个错误

在 StreamBuffer.php 第 269 行:

无法与主机 smtp.gmail.com 建立连接 [Connection ti #110]

EDIT#2:telnet smtp.gmail.com 587 没有响应。

编辑#3:sudo ufw status

Status: active

To                         Action      From
--                         ------      ----
Apache Full                ALLOW       Anywhere
587/tcp                    ALLOW       Anywhere
465/tcp                    ALLOW       Anywhere
22                         ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
21/tcp                     ALLOW       Anywhere
587                        ALLOW       Anywhere
Apache Full (v6)           ALLOW       Anywhere (v6)
587/tcp (v6)               ALLOW       Anywhere (v6)
465/tcp (v6)               ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
21/tcp (v6)                ALLOW       Anywhere (v6)
587 (v6)                   ALLOW       Anywhere (v6)

编辑#4:
我为此项目创建的新 Gmail 应用程序密钥仍未使用。

我试过this answer

在 AbstractSmtpTransport.php 第 419 行:
预期响应代码 220,但得到代码“”,消息“”

this answer 也没有帮助。

EDIT#5:检查服务器仪表板上的 smtp 权限。打扰各位了,抱歉。

【问题讨论】:

  • 您的端口可能有误。你试过替代品吗?例如 465?
  • @catbadger 是的,我试过 465,同样的错误
  • 可能是 dns。尝试 ping google.com?
  • 可能是防火墙问题。
  • 这是偶然的谷歌云平台服务器吗?

标签: php ubuntu-16.04 gmail-api laravel-5.5 apache2.4


【解决方案1】:

我有使用 GoDaddy 服务器的经验,这些服务器会限制您的服务器每天可以发送的中继数量。

Google Cloud Platform 通过阻止常用的 SMTP 电子邮件端口来完全禁止发送电子邮件。他们确实与 saas 电子邮件提供商达成协议,以增加您可以发送的免费电子邮件的数量。例如,我使用 mailgun,而不是每月只免费发送 10,000 封电子邮件,我可以发送 30,000 封电子邮件。我真的很喜欢以这种方式发送电子邮件,因为它们具有更高的可传递性,并且允许我们更轻松地跟踪点击、取消订阅、查看等。最重要的是,我建议订阅其中一项服务。

我怀疑 Scaleway 也限制了你。基本上,任何云服务器托管服务都对电子邮件负责。尤其是在共享主机的情况下,1 个垃圾邮件发送者可以将同一服务器和区域中的多个用户标记为垃圾邮件发送者,即使他们可能是无辜的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2017-09-25
    • 2017-01-16
    • 2016-04-15
    • 2016-01-27
    • 2013-09-22
    相关资源
    最近更新 更多