Laravel 邮件奇怪的超时错误

Posted

技术标签:

【中文标题】Laravel 邮件奇怪的超时错误【英文标题】:Laravel mail strange timeout errors 【发布时间】:2017-07-10 23:52:12 【问题描述】:

我有一些问题困扰了很长时间。

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

Swift_TransportException in AbstractSmtpTransport.php line 404:
Connection to my-smtp.company.com:25 Timed Out

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

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

D:\php-7.1.1-x64\php.exe D:\wwwroot\myapp\artisan queue:listen --timeout=60 --tries=1

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

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

谁能帮帮我?

【问题讨论】:

Swift_TransportException in AbstractSmtpTransport.php line 404: Connection to smtp.gmail.com:465 Timed Out的可能重复 不,不是。就我而言,它可以正常工作,但在成功发送邮件时会出现超时错误。 尝试以下解决方案:***.com/a/38197222/2087247 我的连接没有问题。这不是我在 Laravel 中的第一个应用程序。我可以成功连接并已经发送了数百封邮件。我遇到了随机超时错误的问题。看起来它以某种方式与没有收到服务器响应的 swiftmailer 连接。也许有可能以某种方式改变那个超时...... 我在 laravel 5.6 中也面临同样的问题。 【参考方案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;
        );
    


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

'provider' => [
...
// Illuminate\Mail\MailServiceProvider::class,
App\Providers\MailServiceProvider::class,
...
],

【讨论】:

以上是关于Laravel 邮件奇怪的超时错误的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Laravel 应用程序发送电子邮件:无法与主机 smtp.gmail.com 建立连接 [连接超时 #110]

Laravel 队列,连接到 tcp://smtp.office365.com:587 超时

Laravel队列进程超时错误

laravel php artisan migrate 错误(超时)

Laravel/XAMPP/Sendmail 不发送邮件

Laravel 5.0 ajax 消息提交返回错误或超时