【问题标题】:Laravel app not sending emails using the same piece of codeLaravel 应用程序不使用相同的代码发送电子邮件
【发布时间】:2019-12-27 09:55:11
【问题描述】:

我有一个 Laravel 应用程序,我通过 Laravel Forge 在 Digital Ocean 中提供服务,我正在使用来自 HostGator 的旧共享服务器的电子邮件服务器,我的配置如下:

MAIL_DRIVER=smtp
MAIL_HOST=cloud232.hostgator.com
MAIL_FROM_ADDRESS=noreply@*********
MAIL_FROM_NAME=noreply
MAIL_USERNAME=noreply@************
MAIL_PASSWORD=********************
MAIL_ENCRYPTION=tls
MAIL_PORT=587

一切正常,我可以发送电子邮件了。

我有一种方法可以使用一个传递的参数过滤数据库,然后将电子邮件发送给过滤后的客户。

我使用 forge 上的 cron 作业从 URL 调用此方法(不是 Laravel 调度程序,而是 cron 作业表中的条目)。

由于我过去几个月一直在使用它,现在我添加了另一个调用相同函数但以不同方式过滤数据库的方法(并且集合正确返回),但新方法无法发送任何电子邮件,因为我收到这样的连接被拒绝错误:

Connection could not be established with host cloud232.hostgator.com [Connection refused #111]

这是堆栈跟踪:

#0 /home/forge/prestamos.ikiwi.net.ar/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php(58): Swift_Transport_StreamBuffer->establishSocketConnection()
#1 /home/forge/prestamos.ikiwi.net.ar/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(143): Swift_Transport_StreamBuffer->initialize(Array)
#2 /home/forge/prestamos.ikiwi.net.ar/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php(65): Swift_Transport_AbstractSmtpTransport->start()
#3 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(484): Swift_Mailer->send(Object(Swift_Message), Array)
#4 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(259): Illuminate\Mail\Mailer->sendSwiftMessage(Object(Swift_Message))
#5 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(159): Illuminate\Mail\Mailer->send(Object(Illuminate\Support\HtmlString), Array, Object(Closure))
#6 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php(19): Illuminate\Mail\Mailable->Illuminate\Mail\{closure}()
#7 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(160): Illuminate\Mail\Mailable->withLocale(NULL, Object(Closure))
#8 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(275): Illuminate\Mail\Mailable->send(Object(Illuminate\Mail\Mailer))
#9 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(229): Illuminate\Mail\Mailer->sendMailable(Object(App\Mail\CompleteRegistration))
#10 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Mail/PendingMail.php(127): Illuminate\Mail\Mailer->send(Object(App\Mail\CompleteRegistration))
#11 /home/forge/prestamos.ikiwi.net.ar/app/Http/Controllers/CustomerController.php(100): Illuminate\Mail\PendingMail->send(Object(App\Mail\CompleteRegistration))
#12 /home/forge/prestamos.ikiwi.net.ar/app/Http/Controllers/CustomerController.php(90): App\Http\Controllers\CustomerController::sendMail(2, 3, Object(Illuminate\Database\Eloquent\Collection))
#13 /home/forge/prestamos.ikiwi.net.ar/app/Http/Controllers/CustomerController.php(26): App\Http\Controllers\CustomerController::sendReminder(3, 599)
#14 [internal function]: App\Http\Controllers\CustomerController::thirdReminder()
#15 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#16 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('thirdReminder', Array)
#17 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\CustomerController), 'thirdReminder')
#18 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController()
#19 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Router.php(680): Illuminate\Routing\Route->run()
#20 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#21 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#22 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#23 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#24 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(58): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#25 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), 60, '1')
#26 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#27 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#28 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#29 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Router.php(657): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#30 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#31 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#32 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#33 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#34 /home/forge/prestamos.ikiwi.net.ar/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#35 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#36 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#37 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#38 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#39 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#40 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#41 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#42 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#43 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#44 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#45 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#46 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#47 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#48 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#49 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#50 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#51 /home/forge/prestamos.ikiwi.net.ar/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#52 /home/forge/prestamos.ikiwi.net.ar/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#53 {main}

如果是完全相同的代码怎么会发生这种情况??

foreach ($customers as $customer) {
    try {
        Mail::to($customer->email)->send(new CompleteRegistration($step, $reminderCount, $customer));               
    } catch (\Exception $e) {
        \Log::error($e->getMessage());
    }
}

提前致谢。

【问题讨论】:

  • 你能记录堆栈跟踪而不是只记录来自异常的错误消息吗?
  • 编辑并添加了堆栈跟踪。
  • MAIL_ENCRYPTION=ssl MAIL_PORT=25

标签: php laravel email


【解决方案1】:

在 .env 中进行更改后运行 php artisan config:cache

我想这可能对你有帮助。

【讨论】:

  • 我没有更改 .env 文件,与我一直用于发送电子邮件的文件相同。
  • 如果您遇到证书错误,请将以下代码粘贴到最后的 config/mail.php 中。 'stream' => ['ssl' => ['allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, ], ],
  • 可能是您的邮件服务提供商未将您发送电子邮件的域列入白名单。尝试联系您的邮件服务提供商。
【解决方案2】:

根据 HostGator 文档:

无论您的电子邮件列表有多大,无论何时发送消息,您都必须限制它。我们建议您将其限制为至少每 8 秒发送 1 封电子邮件。 (每 8 秒发送 1 封将在 1 小时内发送 450 封电子邮件,使您保持低于 500 封外发电子邮件的限制。)如果您使用的邮件列表软件不允许您进行限制,您必须切换到可以使用的应用程序或脚本。我们推荐 PHPList,它可以在您的 CPanel 中的 Quickinstall 下找到。

重要提示:如果您不限制并尝试发送 500 封电子邮件,服务器将尝试在 1 秒内发送所有 500 封电子邮件,这在我们的共享服务器上是不可能的。这将导致服务器负载非常高,整个服务器将变得迟缓,可能会影响您的站点和服务,直到此发送过程完成。我们的工作是保持服务器正常运行,而不会出现迟缓或遇到问题。任何导致服务器负载变高的人都将被挂起,进程将被终止。如果您选择不限制,您很可能会因服务器崩溃而被暂停。

我开始尝试使用较小的邮件列表,结果发现每个进程最多可以发送 7 封电子邮件,因此解决此问题的方法是限制发送进程。

我拥有的其他旧进程没有发生这种情况的原因是我在它们之间运行它们的时间很短,所以列表永远不够大,对于我打开的这个线程,我运行新的方法一天一次,所以列表越来越大。

当我在使用 Laravel 时,我会想到一个结合 cron 作业、作业和队列的解决方案,非常感谢你的努力和回答,希望这个帖子对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2015-11-05
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多