Php 通过Symfony Messenger执行邮件发送
我在寻找一个大的帮助与我的代码。 我尽我所能连接了一些Symfony功能,我想我会有所进展 我正在使用Symfony 4.2和API平台,并试图添加一个过程,即发送电子邮件消息以异步方式使用 我有我的注释实体,它在持久实体上触发它。它正在触发我的调用函数,但出现了一个问题。我不太明白下一步该怎么办 正如文档中所述,首先我需要配置数据持久器:Php 通过Symfony Messenger执行邮件发送,php,symfony,symfony4,api-platform.com,symfony-messenger,Php,Symfony,Symfony4,Api Platform.com,Symfony Messenger,我在寻找一个大的帮助与我的代码。 我尽我所能连接了一些Symfony功能,我想我会有所进展 我正在使用Symfony 4.2和API平台,并试图添加一个过程,即发送电子邮件消息以异步方式使用 我有我的注释实体,它在持久实体上触发它。它正在触发我的调用函数,但出现了一个问题。我不太明白下一步该怎么办 正如文档中所述,首先我需要配置数据持久器: <?php namespace App\DataPersister; use ApiPlatform\Core\DataPersister\Con
<?php
namespace App\DataPersister;
use ApiPlatform\Core\DataPersister\ContextAwareDataPersisterInterface;
use ApiPlatform\Core\DataPersister\DataPersisterInterface;
use App\Entity\Comment;
final class EmailNotificationDataPersister implements ContextAwareDataPersisterInterface
{
private $decorated;
private $mailer;
public function __construct(ContextAwareDataPersisterInterface $decorated, \Swift_Mailer $mailer)
{
$this->decorated = $decorated;
$this->mailer = $mailer;
}
public function supports($data, array $context = []): bool
{
return $this->decorated->supports($data, $context);
}
public function persist($data, array $context = [])
{
$result = $this->decorated->persist($data, $context);
if (
$data instanceof Comment && (
($context['collection_operation_name'] ?? null) === 'post')
) {
$this->sendWelcomeEmail($data);
}
return $result;
}
public function remove($data, array $context = [])
{
return $this->decorated->remove($data, $context);
}
private function sendWelcomeEmail(Comment $comment)
{
// Your welcome email logic...
// $this->mailer->send(...);
}
}
和框架
messenger:
transports:
amqp: "%env(MESSENGER_TRANSPORT_DSN)%"
routing:
'App\Entity\Comment': amqp
还有,有没有办法向用户表中发布的任何随机邮件发送电子邮件?我想为此设置mailer配置。对于异步运行操作,您需要。对于本地测试,symfony服务器和docker工作良好
#config/packages/messenger.yaml
transports:
async: '%env(RABBITMQ_DSN)%'
在项目根目录下放置docker compose.yaml
rabbitmq:
image: rabbitmq:3-management
ports: [5672, 15672]
运行控制台
docker-compose up -d
symfony server:start -d
symfony console messenger:consume async -vv
用于消费在控制台中运行的消息
docker-compose up -d
symfony server:start -d
symfony console messenger:consume async -vv
在生产过程中,您必须添加具有RABBITMQ、Amazon SQS等真实凭据的
RABBITMQ\u DSN
(或MESSENGER\u TRANSPORT\u DSN
),并且可能用于消费消息。Hi。首先,显示messenger和sendmail配置。其次,您可以在dataPersister类中使用messageBus->dispatch
,这里不需要订阅服务器。您还需要使用AsyncMessageInterface
创建消息。然后您可以在您的调用方法中使用mailer->send($message)
。非常感谢您的重播!我更新了上面的帖子@EugeneRubanSo看,检查Symfony关于创建和发送电子邮件的文档。您只需创建新的电子邮件对象并使用mailer发送即可。
symfony console messenger:consume async -vv