Laravel邮件奇怪的超时错误

Grz*_*iek 5 php swiftmailer laravel laravel-5 php-7

我有很多问题了。

我的应用程序正在向客户发送邮件。
在过去的几个月中,我已将此应用程序迁移到Laravel(当前为5.4)。
很多时候我收到错误:

Swift_TransportException in AbstractSmtpTransport.php line 404:
Connection to my-smtp.company.com:25 Timed Out
Run Code Online (Sandbox Code Playgroud)

问题是我无法摆脱此错误消息。
它发生在大约10%的情况下-或实时发送排队的任务和邮件。
奇怪的是,这些邮件实际上是发送出去的,但还是会出现错误。

我正在使用Windows服务器,并通过这种方式对正在运行侦听器的排队邮件:

D:\php-7.1.1-x64\php.exe D:\wwwroot\myapp\artisan queue:listen --timeout=60 --tries=1
Run Code Online (Sandbox Code Playgroud)

我进行了一些测试,看起来当引发错误时,它总是在触发队列作业或在浏览器中执行代码后的33-36秒之后。

将max_execution_time时间更改为60秒,但这没有帮助。

有人可以帮助我吗?

小智 1

我有同样的问题,我的应用程序在 Laravel 6.0 上运行

我的解决方案:

1) 创建自定义邮件服务提供商。

2)使用SwiftTransport方法“setTimeout”。

<?php

namespace App\Providers;

use Illuminate\Mail\MailServiceProvider as MailProvider;
use Illuminate\Mail\TransportManager;

class MailServiceProvider extends MailProvider
{
    /**
     * Register the Swift Transport instance.
     *
     * @return void
     */
    protected function registerSwiftTransport()
    {
        $this->app->singleton('swift.transport', function ($app) {
            $transport = new TransportManager($app);
            $transport->setTimeout(config('mail.connection_timeout'));
            return $transport;
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

3) 替换 \config\app.php 中的提供者配置

'provider' => [
...
// Illuminate\Mail\MailServiceProvider::class,
App\Providers\MailServiceProvider::class,
...
],
Run Code Online (Sandbox Code Playgroud)