laraval队列守护进程邮件停止运行与SSL错误 [英] laraval queue daemon mail stops functioning with SSL error

查看:714
本文介绍了laraval队列守护进程邮件停止运行与SSL错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在运行一个Laravel队列守护进程,根据所采取的行动发送邮件。这是通过主管运行,以确保它始终运行。起初工作正常,但一段时间后邮件停止发送。错误是没有报告链,但日志显示:

  [2014-07-30 20:00:21]生产.ERROR:异常'ErrorException'与消息'fwrite():SSL操作失败与代码1. OpenSSL错误消息:
错误:1409F07F:SSL例程:SSL3_WRITE_PENDING:不良写入重试在/ srv / www /示例.co.uk / vendor / swiftmailer / swiftmailer / lib / classes / Swift / Transport / StreamBuffer.php:232
堆栈跟踪:
#0 [内部函数]:Illuminate\Exception\Handler- > handleError(2,'fwrite():SSL o ...','/ srv / www / example ...',232,Array)
#1 /srv/www/example.co.uk /vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php(232):fwrite(资源ID#376,'MAIL FROM:< hel ...')
#2 / srv / www / example.co.uk / vendor / swiftmailer / swiftmailer / lib / classes / Swift / ByteStream / AbstractFilterableInputStream.php(171):Swift_Transport_StreamBuffer-> _commit('MAIL FROM:< hel ...')
#3 /srv/www/example.co.uk/vendor/swift mailer / swiftmailer / lib / classes / Swift / ByteStream / AbstractFilterableInputStream.php(90):Swift_ByteStream_AbstractFilterableInputStream-> _doWrite('MAIL FROM:< hel ...')
#4 / srv / www / example。 co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(274):Swift_ByteStream_AbstractFilterableInputStream-> write('MAIL FROM:< hel ...')
#5 / srv / www / example.co.uk / vendor / swiftmailer / swiftmailer / lib / classes / Swift / Transport / EsmtpTransport.php(243):Swift_Transport_AbstractSmtpTransport-> executeCommand('MAIL FROM:< hel ...' ,Array)
#6 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(323):Swift_Transport_EsmtpTransport-> executeCommand('MAIL FROM :< hel ...',Array)
#7 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(416):Swift_Transport_EsmtpTransport - > _doMailFromCommand('hello@example.co ... )
#8 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(444):Swift_Transport_AbstractSmtpTransport-> _doMailTransaction(Object(Swift_Message)) 'hello@example.co ...',Array,Array)
#9 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php 174):Swift_Transport_AbstractSmtpTransport-> _sendTo(Object(Swift_Message),'hello@example.co ...',Array,Array)
#10 /srv/www/example.co.uk/vendor/swiftmailer/ swiftmailer / lib / classes / Swift / Mailer.php(85):Swift_Transport_AbstractSmtpTransport-> send(Object(Swift_Message),Array)
#11 /srv/www/example.co.uk/vendor/laravel/framework /src/Illuminate/Mail/Mailer.php(328):Swift_Mailer-> send(Object(Swift_Message),Array)
#12 /srv/www/example.co.uk/vendor/laravel/framework/ src / Illuminate / Mail / Mailer.php(150):Illuminate\Mail\Mailer-> sendSwiftMessage(Object(Swift_Message))
#13 / srv / www / examp le.co.uk/bootstrap/compiled.php(3231):Illuminate\Mail\Mailer-> send('emails.campaign ...',Array,Object(Closure))
#14 / srv / www / example.co.uk / app / commands / Sender.php(252):Illuminate\Support\Facades\Facade :: __ callStatic('send',Array)
#15 / srv / www / example.co.uk / app / commands / Sender.php(252):Illuminate\Support\Facades\Mail :: send('emails.campaign ...',Array,Object(Closure))
#16 /srv/www/example.co.uk/app/commands/Sender.php(116):Sender-> _sendEmail(Array,Array,Array,Array)
#17 / srv / www / example.co.uk / vendor / laravel / framework / src / Illuminate / Queue / Jobs / Job.php(96):Sender-> queue(Object(Illuminate\Queue\Jobs\RedisJob)),Array )
#18 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php(46):Illuminate\Queue\Jobs\Job-   resolveAndFire(Array)
#19 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(192):Illuminate \Queue\Jobs\RedisJob-> fire()
#20 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(142) :照亮\Queue\Worker->进程('redis',Object(Illuminate\Queue\Jobs\RedisJob),'2',0)
#21 / srv / www / example。 co.uk/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(101):Illuminate\Queue\Worker-> pop('redis',NULL,0,'3','2' )
#22 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(73):Illuminate\Queue\Worker-> runNextJobForDaemon(' redis',NULL,0,'3','2')
#23 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php 98):Illuminate\Queue\Worker->守护进程('redis',NULL,0,128,'3','2')
#24 /srv/www/example.co.uk/ vendor / laravel / framework / src / Illuminate / Queue / Console / WorkCommand.php(68):Illuminate\Queue\Console\WorkCommand-> run工人('redis',NULL,0,128,true)
#25 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Console/Command.php(112): Illuminate\Queue\Console\WorkCommand-> fire()
#26 /srv/www/example.co.uk/vendor/symfony/console/Symfony/Component/Console/Command/Command.php (252):Illuminate\Console\Command-> execute(Object(Symfony\Component\Console\Input\ArgvInput),Object(Symfony\Component\Console\Output\ConsoleOutput))
#27 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Console/Command.php(100):Symfony\Component\Console\Command\Command- > run(Object(Symfony\Component\Console\Input\ArgvInput),Object(Symfony\Component\Console\Output\ConsoleOutput))
#28 / srv / www / example .co.uk / vendor / symfony / console / Symfony / Component / Console / Application.php(887):Illuminate\Console\Command-> run(Object(Symfony\Component\\ Console \Input\ArgvInput),Object(Symfony\Component\Console\Output\ConsoleOutput))
#29 /srv/www/example.co.uk/vendor/symfony/console/Symfony /Component/Console/Application.php(193):Symfony\Component\Console\Application-> doRunCommand(Object(Illuminate\Queue\Console\WorkCommand),Object(Symfony\Component\Console \Input\ArgvInput),Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /srv/www/example.co.uk/vendor/symfony/console/Symfony/ Component / Console / Application.php(124):Symfony\Component\Console\Application-> doRun(Object(Symfony\Component\Console\Input\ArgvInput),Object(Symfony\Component\\ /Config $ b#32 {主} [] []

我正在使用sendgrid邮寄



编辑,与以下相同: https://github.com/swiftmailer/swiftmailer/issues/490

解决方案

是Laravel / Swift内的一个bug,它是处理长时间运行的队列工作器中的套接字的方式。避免这个问题的最好方法是确保在发送每封电子邮件之后关闭运输。



有一个封闭的问题 Laravel的错误跟踪器,有几个补丁到Laravel代码库,将解决这个问题。



或者,看看 YOzaz / Laravel-SwiftMailer 包,它具有更新的邮件外观,最有可能解决您遇到的问题。


I am running a laravel queue daemon, which sends mail depending on the actions taken. This is running through supervisor to ensure it always runs. It works fine at first, but after some time the mail stops sending. The error is not reporting up the chain, but the logs show:

[2014-07-30 20:00:21] production.ERROR: exception 'ErrorException' with message 'fwrite(): SSL operation failed with code 1. OpenSSL Error messages:
error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry' in /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php:232
Stack trace:
#0 [internal function]: Illuminate\Exception\Handler->handleError(2, 'fwrite(): SSL o...', '/srv/www/example...', 232, Array)
#1 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php(232): fwrite(Resource id #376, 'MAIL FROM: <hel...')
#2 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php(171): Swift_Transport_StreamBuffer->_commit('MAIL FROM: <hel...')
#3 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php(90): Swift_ByteStream_AbstractFilterableInputStream->_doWrite('MAIL FROM: <hel...')
#4 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(274): Swift_ByteStream_AbstractFilterableInputStream->write('MAIL FROM: <hel...')
#5 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(243): Swift_Transport_AbstractSmtpTransport->executeCommand('MAIL FROM: <hel...', Array, Array)
#6 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(323): Swift_Transport_EsmtpTransport->executeCommand('MAIL FROM: <hel...', Array)
#7 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(416): Swift_Transport_EsmtpTransport->_doMailFromCommand('hello@example.co...')
#8 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(444): Swift_Transport_AbstractSmtpTransport->_doMailTransaction(Object(Swift_Message), 'hello@example.co...', Array, Array)
#9 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(174): Swift_Transport_AbstractSmtpTransport->_sendTo(Object(Swift_Message), 'hello@example.co...', Array, Array)
#10 /srv/www/example.co.uk/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php(85): Swift_Transport_AbstractSmtpTransport->send(Object(Swift_Message), Array)
#11 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(328): Swift_Mailer->send(Object(Swift_Message), Array)
#12 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(150): Illuminate\Mail\Mailer->sendSwiftMessage(Object(Swift_Message))
#13 /srv/www/example.co.uk/bootstrap/compiled.php(3231): Illuminate\Mail\Mailer->send('emails.campaign...', Array, Object(Closure))
#14 /srv/www/example.co.uk/app/commands/Sender.php(252): Illuminate\Support\Facades\Facade::__callStatic('send', Array)
#15 /srv/www/example.co.uk/app/commands/Sender.php(252): Illuminate\Support\Facades\Mail::send('emails.campaign...', Array, Object(Closure))
#16 /srv/www/example.co.uk/app/commands/Sender.php(116): Sender->_sendEmail(Array, Array, Array, Array)
#17 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(96): Sender->queue(Object(Illuminate\Queue\Jobs\RedisJob), Array)
#18 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php(46): Illuminate\Queue\Jobs\Job->resolveAndFire(Array)
#19 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(192): Illuminate\Queue\Jobs\RedisJob->fire()
#20 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(142): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), '2', 0)
#21 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(101): Illuminate\Queue\Worker->pop('redis', NULL, 0, '3', '2')
#22 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(73): Illuminate\Queue\Worker->runNextJobForDaemon('redis', NULL, 0, '3', '2')
#23 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(98): Illuminate\Queue\Worker->daemon('redis', NULL, 0, 128, '3', '2')
#24 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(68): Illuminate\Queue\Console\WorkCommand->runWorker('redis', NULL, 0, 128, true)
#25 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Console/Command.php(112): Illuminate\Queue\Console\WorkCommand->fire()
#26 /srv/www/example.co.uk/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(252): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#27 /srv/www/example.co.uk/vendor/laravel/framework/src/Illuminate/Console/Command.php(100): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#28 /srv/www/example.co.uk/vendor/symfony/console/Symfony/Component/Console/Application.php(887): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#29 /srv/www/example.co.uk/vendor/symfony/console/Symfony/Component/Console/Application.php(193): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /srv/www/example.co.uk/vendor/symfony/console/Symfony/Component/Console/Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#31 /srv/www/example.co.uk/artisan(59): Symfony\Component\Console\Application->run()
#32 {main} [] []

I'm suck for ideas? I'm using sendgrid for mailing

edit, Same as here: https://github.com/swiftmailer/swiftmailer/issues/490

解决方案

This is a bug inside Laravel/Swift and the way that it is handling it's sockets inside the long running queue worker. The best way to avoid this issue is to make sure that you are closing your transport after each email has been sent.

There is a closed issue inside Laravel's bug tracker that has a couple of patches to the Laravel code base that will resolve this issue.

Alternatively, have a look at the YOzaz/Laravel-SwiftMailer package, which has an updated Mail facade that will most likely resolve the problem that you are having.

这篇关于laraval队列守护进程邮件停止运行与SSL错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆