Php 在Symfony 5中异步使用电子邮件

Php 在Symfony 5中异步使用电子邮件,php,symfony,email,mailer,symfony5,Php,Symfony,Email,Mailer,Symfony5,我使用Symfony 5 messanger处理以异步方式发送的电子邮件。我有: 在.env中配置的电子邮件DNS MAILER\u DSN=smtp://localhost .env中的messanger传输DNS(我使用数据库存储电子邮件队列) MESSENGER\u传输\u DSN=doctrine://default messenger.yaml中的传输和路由 serializer: default_serializer: messenger.transport.s

我使用Symfony 5 messanger处理以异步方式发送的电子邮件。我有:

  • .env中配置的电子邮件DNS

    MAILER\u DSN=smtp://localhost

  • .env中的messanger传输DNS(我使用数据库存储电子邮件队列)

    MESSENGER\u传输\u DSN=doctrine://default

  • messenger.yaml中的传输和路由

      serializer:
          default_serializer: messenger.transport.symfony_serializer
    
      transports:
          # https://symfony.com/doc/current/messenger.html#transport-configuration
          async: '%env(MESSENGER_TRANSPORT_DSN)%'
          failed: 'doctrine://default?queue_name=failed'
    
          # sync: 'sync://'
    
      routing:
          # Route your messages to the transports
          # 'App\Message\YourMessage': async
          'Symfony\Component\Mailer\Messenger\SendEmailMessage':  async
    
当前情况:将电子邮件发送到队列工作-使用mailer会在数据库表messanger\u messages中插入记录

问题:如果我正确理解了文档,对于异步电子邮件处理,首先将电子邮件排队到DB中(对于我的情况),然后使用命令
php bin/console messenger:consume-vv async
逐个发送。不幸的是,执行此命令不会导致发送电子邮件。数据库中的记录保持不变,它们不属于失败类别,也不会生成电子邮件


为了确保发送配置正确,我切换到同步方法,在这种情况下,会立即生成并发送电子邮件。因此,我的问题是,是否还有另一个步骤可以让排队的电子邮件被消费,例如编写自定义发送处理程序(我假设
messanger:consume
命令可以为我这样做)或者,如果我错过了这个过程中的任何其他部分,导致排队的电子邮件没有被使用。

我找到了答案,为后代添加了答案。由于服务器配置中存在问题,命令
messanger:consume
无法工作

在数据库中插入的消息是使用基于apache
php.ini
中设置的时区的当前日期时间插入的。碰巧php有第二个不同的
php.ini
配置文件,仅适用于CLI命令

在CLI生成的脚本中执行
messanger:consume
,以使用不同的时区,从而导致用于获取队列中消息的查询返回空结果(无法满足条件)

php.ini
两个文件中更新和同步时区解决了这个问题,并建立了使用队列中消息的机制

您可以在CLI中使用
php--ini
找到控制台
php.ini