Php 在Symfony 5中异步使用电子邮件
我使用Symfony 5 messanger处理以异步方式发送的电子邮件。我有: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
- 在.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
php bin/console messenger:consume-vv async
逐个发送。不幸的是,执行此命令不会导致发送电子邮件。数据库中的记录保持不变,它们不属于失败类别,也不会生成电子邮件
为了确保发送配置正确,我切换到同步方法,在这种情况下,会立即生成并发送电子邮件。因此,我的问题是,是否还有另一个步骤可以让排队的电子邮件被消费,例如编写自定义发送处理程序(我假设
messanger:consume
命令可以为我这样做)或者,如果我错过了这个过程中的任何其他部分,导致排队的电子邮件没有被使用。我找到了答案,为后代添加了答案。由于服务器配置中存在问题,命令messanger:consume
无法工作
在数据库中插入的消息是使用基于apachephp.ini
中设置的时区的当前日期时间插入的。碰巧php有第二个不同的php.ini
配置文件,仅适用于CLI命令
在CLI生成的脚本中执行messanger:consume
,以使用不同的时区,从而导致用于获取队列中消息的查询返回空结果(无法满足条件)
在php.ini
两个文件中更新和同步时区解决了这个问题,并建立了使用队列中消息的机制
您可以在CLI中使用php--ini
找到控制台php.ini