我正在运行 Laravel 6.20.0,从昨天开始,当我的队列工作人员尝试发送电子邮件时,我遇到了以下错误:
Swift_TransportException: Expected response code 250 but got an empty response in public_html/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:448
从昨天开始,我已经多次尝试重新排队我的电子邮件,但在尝试发送时我一直收到同样的错误。这在近一年前完美无缺,所以我有点困惑是什么导致了这个问题。我最近没有更改任何凭据,也没有更改任何代码或配置。
我的邮件设置如下:
MAIL_DRIVER=smtp
MAIL_HOST="smtp-relay.gmail.com"
MAIL_PORT=587
MAIL_USERNAME="my@user.name"
MAIL_PASSWORD="myapppassword"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="my@from.address"
MAIL_FROM_NAME="My Name"
我在 Google Admin 中仔细检查了我的服务器的 IPv4 地址和 IPv6 地址都已列入白名单,并且启用了 SMTP 中继服务。我还在我的 Google 帐户中创建了一个新的应用密码,看看这是否能解决问题 - 但没有运气。
我还清除了配置缓存(并尝试了 php artisan config:cache)并尝试重新启动主管,该主管运行运行电子邮件队列任务的工作人员。我还尝试将电子邮件一一重新排队,以防我触发某种限制,但无济于事。我的网站绝不会发送很多电子邮件,每个月大约 100 封,完全在我的电子邮件帐户设置的限制之内。 (我目前有 <10 人在排队。)
作为最后的手段,我在 Google Admin 中关闭了 SMTP 验证和 TLS 加密,因此使用 SMTP 的唯一要求是将 IP 地址列入白名单(确实如此)。但这也不起作用,所以我根据要求再次打开了 SMTP 验证和 TLS 加密。
最后;我运行了 Composer 更新,但这也没有解决问题。
我在 Stackoverflow 上发现其他一些旧线程也有类似问题,但我已经尝试了上述所有提供的解决方案。
我错过了什么?
答案 0 :(得分:1)
我认为您需要像这样将邮件端口更改为 25: MAIL_PORT=25
答案 1 :(得分:1)
刚刚遇到同样的问题。 在我的情况下,当我尝试发送没有队列的电子邮件时,SMTP 发送有效。 但是,当我尝试使用队列发送具有相同配置的相同电子邮件时,出现如下错误:
[2021-02-15 12:43:24] local.ERROR: Expected response code 250 but got an empty response {"exception":"[object] (Swift_TransportException(code: 0): Expected response code 250 but got an empty response at /app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:448)
[stacktrace]
#0 /app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(345): Swift_Transport_AbstractSmtpTransport->assertResponseCode('', Array)
#1 /app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(305): Swift_Transport_AbstractSmtpTransport->executeCommand('HELO [127.0.0.1...', Array, Array, false, NULL)
#2 /app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(368): Swift_Transport_EsmtpTransport->executeCommand('HELO [127.0.0.1...', Array)
#3 /app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(341): Swift_Transport_AbstractSmtpTransport->doHeloCommand()
#4 /app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(148): Swift_Transport_EsmtpTransport->doHeloCommand()
经过长期研究,我发现该问题与 HELO
命令本身有关。
正如您在日志中可以清楚地看到的那样,出于某种原因(可能是服务器主机名)有 127.0.0.1
IP 地址,Google 正在阻止该地址。
为了解决这个问题,我在我的 artisan
文件中添加了一小行:
$_SERVER['SERVER_NAME'] = 'mydomain.com';
所以我的工匠文件现在看起来像这样:
#!/usr/bin/env php
<?php
$_SERVER['SERVER_NAME'] = 'mydomain.com';
define('LARAVEL_START', microtime(true));
...
答案 2 :(得分:0)
与 Google Workspace 代表交谈 作为他们要求使用的临时解决方案
smtp.gmail.com
而不是 smtp-relay.gmail.com
参与了我们的 2 个项目。
附言Workspace(前 Gsuite)上的每个帐户限制为 130 封电子邮件 例如,如果您有 5 个用户,则 5x130=650
代表说什么哈哈:)