Laravel SMTP通过队列接收空响应发送电子邮件

时间:2021-01-25 13:10:45

标签: laravel smtp gmail

我正在运行 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 上发现其他一些旧线程也有类似问题,但我已经尝试了上述所有提供的解决方案。

我错过了什么?

3 个答案:

答案 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

代表说什么哈哈:)