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]
连接错误 - SQLSTATE [HY000] [2002]操作超时
Laravel 队列,连接到 tcp://smtp.office365.com:587 超时