生产中的 Laravel 9 邮件仅收到此错误 - 预期响应代码“250”,但收到代码“451”

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

我们上周已将应用程序升级到 Laravel 9,并注意到在生产中部署构建后立即出现了大量失败的作业。

这些错误都是与以下错误消息相关的电子邮件:

Expected response code "250" but got code "451", with message "451 4.4.2 Timeout waiting for data from client.".

我们已经恢复到之前的版本(使用 SwiftMailer)并且错误停止了。澄清一下,我们已经运行该应用程序几周了,之前从未出现过该错误。

在“Staging”中我们没有这个问题。唯一的区别是我们在 live 和 set 中使用 SQS 进行队列:

APP_ENV=production
APP_DEBUG=false

这是唯一的区别。

laravel amazon-sqs mailer
3个回答
13
投票

您可以尝试将

'ping_threshold' => 10,
添加到
smtp
 中的 
ses
config/mail.php

配置吗

如果您使用队列工作器/管理器,请记住重新启动进程以使新配置生效。

这似乎已经解决了我的问题。 可能是巧合,但如果问题再次出现,我们会报告。


2
投票

按照上述答案https://stackoverflow.com/a/71530024/16046216中的建议,在

'ping_threshold' => 10
中设置
config/mail.php
对我有用。

但是,请勿将其添加到

mailers
smtp
ses
配置中。将其添加到配置文件中的根级别(与添加
mailers
log_channel
的级别相同)。请参阅以下 Laravel 项目中
config/mail.php
配置的快照:

<?php

return [
    ...
    /*
    |--------------------------------------------------------------------------
    | Mailer Configurations
    |--------------------------------------------------------------------------
    |
    */

    'mailers' => [
        'smtp' = [
            ...
        ],
        ...
    ],

    ...

    /*
    |--------------------------------------------------------------------------
    | Transport Settings
    |--------------------------------------------------------------------------
    |
    */
    'ping_threshold' => 10,
];

调试后我发现了如何在

\Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory
\Illuminate\Mail\MailManager::createSmtpTransport()
中读取和设置配置选项。

从 8.x 升级到 Laravel 9.x 后,我们在生产服务器上经常遇到此错误。在服务器上,电子邮件使用后台队列 (SQS) 服务通过 SES 发送。


0
投票

niranjan 的方法在 Laravel 9 上不起作用,如果你转储 $dsn->getOption('ping_threshold') (EsmtpTransportFactory 第 63 行),它会得到 null,而 ping_threshold 位于 'smtp' 内,它会正确得到 10。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.