Symfony Messenger:每封电子邮件发送已记录的Messenger错误(通过swift_mailer)?

虚拟化

我已经将symlog配置为通过电子邮件发送错误,如symfony文档中所述:https : //symfony.com/doc/4.3/logging/monolog_email.html

与请求期间发生的所有错误提示以及控制台命令错误一起使用时效果很好。但是,它不会发送有关在处理Messenger消息期间发生的错误的电子邮件。

运行使用者时会显示错误,并且错误bin/console messenger:consume async -vv也会显示在prod.log中,如下所示:[2020-01-10 12:52:38] messenger.CRITICAL: Error thrown while handling message...

感谢您提供有关如何设置独白以通过电子邮件发送Messenger错误的任何提示。

famas23

实际上,swift_mailer使用SwiftMailerHandler的monolog类型还希望实现重置接口,并且默认情况下使用内存假脱机希望将所有电子邮件保留在缓冲区中,直到销毁为止,因此直到请求结束:

  • onKernelTerminate
  • 终止
  • 否则,直到调用reset方法为止,这意味着对于Messenger工作者,将不会发送任何电子邮件,因为它们不会立即进行刷新-所有电子邮件都将保留在内存缓冲区中,并且如果进程被杀死,可能会丢失。

为了解决这个问题,您可以禁用memoryswiftmailer的默认假脱机设置。另一个解决方案是在WorkerMessageFailedEvent事件触发后刷新您的电子邮件,您可以实现事件订阅者来执行此操作。

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
use Symfony\Component\Messenger\Event\WorkerMessageHandledEvent;
use Symfony\Contracts\Service\ResetInterface;

/**
 * Class ServiceResetterSubscriber.
 */
class ServiceResetterSubscriber implements EventSubscriberInterface
{

     protected ResetInterface $servicesResetter;
     public function __construct(ResetInterface $servicesResetter)
     {
         $this->servicesResetter = $servicesResetter;
     }
     public function resetServices(): void
     {
         $this->servicesResetter->reset();
     }
     public static function getSubscribedEvents(): array
     {
         return [
             WorkerMessageFailedEvent::class => ['resetServices', 10],
         ];
     }

 }

使用正确的参数注册您的服务:

App\EventSubscriber\ServiceResetterSubscriber:
    arguments: ['@services_resetter']

顺便说一句,没有这个限制(没有缓冲区限制),您的应用程序将泄漏,并且永远不会发送电子邮件。

另一个技巧: 确保使消息实现\JsonSerializable以在日志中获取消息内容,因为Messenger会直接使用他的独白,并且其上下文序列化程序希望使用json_encode进行序列化。这就是为什么在使用json_encode进行编码时需要自定义其JSON表示形式的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Symfony Messenger异步发送电子邮件时如何翻译电子邮件?

来自分类Dev

如何使用Symfony 5.1,Monolog和Mailer组件配置通过电子邮件发送的错误?

来自分类Dev

symfony 5.2无法通过MAILER发送smtp电子邮件:预期响应代码为“ 250”

来自分类Dev

Symfony 2 Swift_Mailer多个配方

来自分类Dev

从Symfony中的Swift Mailer发送邮件时阻止邮件头

来自分类Dev

通过Docker容器邮件服务器在Symfony中发送电子邮件

来自分类Dev

Symfony2 / SonataAdminBundle /编辑记录后发送电子邮件

来自分类Dev

无法使用 SMTP 服务器通过 symfony 和 swiftmailer 发送电子邮件

来自分类Dev

从symfony中的cron任务发送电子邮件

来自分类Dev

Symfony在生产环境中发送电子邮件

来自分类Dev

如何使用 swiftmailer 发送电子邮件 - Symfony 3

来自分类Dev

如何在Symfony中将日志发送到电子邮件中出现异常或错误?

来自分类Dev

如何取消Symfony2中“ \ Swift_Events_SendListener”事件中发送的电子邮件?

来自分类Dev

Symfony 4 用户通过电子邮件问题搜索

来自分类Dev

Symfony Messenger和Mailer:如何添加binding_key?

来自分类Dev

在Symfony中创建电子邮件服务

来自分类Dev

如何在Symfony Mailer上的Bootstrap中使用模板化电子邮件?

来自分类Dev

Symfony (2.8):什么是假脱机电子邮件以及为什么不发送电子邮件?

来自分类Dev

Laravel 多次发送每封电子邮件

来自分类Dev

Symfony2,Sonata,UserBundle:在启用用户更新时发送电子邮件

来自分类Dev

电子邮件未在Swiftmailer Symfony2中发送

来自分类Dev

无法使用SwiftMailer和Symfony 2发送电子邮件

来自分类Dev

Symfony2,FOSUserBundle,忘记密码的电子邮件未发送

来自分类Dev

在symfony 2中发送电子邮件时出错[连接被拒绝#111]

来自分类Dev

在生产模式下配置symfony2以在收到异常后发送电子邮件

来自分类Dev

Symfony2 FosuserBundle:重新发送注册确认电子邮件

来自分类Dev

Symfony2发送电子邮件不起作用

来自分类Dev

Symfony2,FOSUserBundle,忘记密码的电子邮件未发送

来自分类Dev

SwiftMailer没有在Symfony 2.5中发送电子邮件

Related 相关文章

  1. 1

    使用Symfony Messenger异步发送电子邮件时如何翻译电子邮件?

  2. 2

    如何使用Symfony 5.1,Monolog和Mailer组件配置通过电子邮件发送的错误?

  3. 3

    symfony 5.2无法通过MAILER发送smtp电子邮件:预期响应代码为“ 250”

  4. 4

    Symfony 2 Swift_Mailer多个配方

  5. 5

    从Symfony中的Swift Mailer发送邮件时阻止邮件头

  6. 6

    通过Docker容器邮件服务器在Symfony中发送电子邮件

  7. 7

    Symfony2 / SonataAdminBundle /编辑记录后发送电子邮件

  8. 8

    无法使用 SMTP 服务器通过 symfony 和 swiftmailer 发送电子邮件

  9. 9

    从symfony中的cron任务发送电子邮件

  10. 10

    Symfony在生产环境中发送电子邮件

  11. 11

    如何使用 swiftmailer 发送电子邮件 - Symfony 3

  12. 12

    如何在Symfony中将日志发送到电子邮件中出现异常或错误?

  13. 13

    如何取消Symfony2中“ \ Swift_Events_SendListener”事件中发送的电子邮件?

  14. 14

    Symfony 4 用户通过电子邮件问题搜索

  15. 15

    Symfony Messenger和Mailer:如何添加binding_key?

  16. 16

    在Symfony中创建电子邮件服务

  17. 17

    如何在Symfony Mailer上的Bootstrap中使用模板化电子邮件?

  18. 18

    Symfony (2.8):什么是假脱机电子邮件以及为什么不发送电子邮件?

  19. 19

    Laravel 多次发送每封电子邮件

  20. 20

    Symfony2,Sonata,UserBundle:在启用用户更新时发送电子邮件

  21. 21

    电子邮件未在Swiftmailer Symfony2中发送

  22. 22

    无法使用SwiftMailer和Symfony 2发送电子邮件

  23. 23

    Symfony2,FOSUserBundle,忘记密码的电子邮件未发送

  24. 24

    在symfony 2中发送电子邮件时出错[连接被拒绝#111]

  25. 25

    在生产模式下配置symfony2以在收到异常后发送电子邮件

  26. 26

    Symfony2 FosuserBundle:重新发送注册确认电子邮件

  27. 27

    Symfony2发送电子邮件不起作用

  28. 28

    Symfony2,FOSUserBundle,忘记密码的电子邮件未发送

  29. 29

    SwiftMailer没有在Symfony 2.5中发送电子邮件

热门标签

归档