Laravel Mail::send 无法在服务器上进行身份验证,但可以在本地工作

问题描述 投票:0回答:2

最近的某个时候,Mail::send 函数在我们的 Laravel 服务器上停止工作。但在本地运行时它仍然有效。

Mail::send(
    'emails.hello',
    $data,
    function ($message) use ($data) {
        $message->from('[email protected]', 'Admin');
        $message->to('[email protected]', 'Admin')
            ->replyTo($data['email'], $data['name'])
            ->subject('Contact Request');
    }
);

服务器和本地实例之间的 .env 配置完全相同,我运行了“php artisan config:cache”以确保加载当前的 .env 文件。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxx
MAIL_PASSWORD=xxx
MAIL_ENCRYPTION=tls

他们都运行 Laravel 5.5.50。服务器运行的是 PHP 7.2.24,本地 PHP 版本是 PHP 7.4.33。服务器响应以下错误:

Failed to authenticate on SMTP server with username "xxx" using 3 possible authenticators. 
Authenticator LOGIN returned Expected response code 235 but got code "535", with message "535-5.7.8 Username and Password not accepted.

我使用邮件帐户设置了双因素身份验证,并且使用应用程序密码进行身份验证。这可能是 Laravel 中某处的配置问题,还是 Google 邮件配置问题?

php laravel smtp
2个回答
1
投票

如果您排除了相同的代码和配置(用户名和应用程序密码)在一个位置(即在您的本地计算机上)工作而在另一个位置(它已经工作了一段时间但现在不工作的服务器)工作工作),这通常指向外部的东西。

请记住,Google 正在使用大量智能技术来保护您和其他人免受使用其电子邮件系统的人的滥用和垃圾邮件。

您的服务器很可能已被阻止,作为 Google 尝试保护您帐户的一部分:https://support.google.com/accounts/troubleshooter/2402620?sjid=10023023285085076167-EU#ts=9279979


0
投票

此问题似乎是由原始主机上的电子邮件系统设置错误或该主机服务施加的某些限制引起的。 在为客户设置网站时,我在测试托管上遇到了类似的问题。然而,当我将网站移动到新的托管平台以使其上线时,电子邮件发送工作完美。

© www.soinside.com 2019 - 2024. All rights reserved.