Reputation: 11
How get provider response result after mail send. For example i send message via symfony/mailgun and want to get message-uid from provider after sending message
$email = (new Email())
->from('[email protected]')
->to('foo@bar')
->subject('Send email test')
->text('email text');
$this->mailer->send($email); // is there any way to return response result instead void
Upvotes: 1
Views: 1997
Reputation: 21
Facing the same issue I came up with following solution:
<?php
namespace MessengerBundle\MessageHandler;
use Symfony\Component\Mailer\Messenger\MessageHandler;
use Symfony\Component\Mailer\Messenger\SendEmailMessage;
use Symfony\Component\Mailer\SentMessage;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
class SendEmailMessageHandler implements MessageHandlerInterface
{
/**
* @var MessageHandler
*/
private $defaultHandler;
/**
* SendEmailMessageHandler constructor.
* @param MessageHandler $defaultMessageHandler
*/
public function __construct(MessageHandler $defaultMessageHandler)
{
$this->defaultHandler = $defaultMessageHandler;
}
/**
* @param SendEmailMessage $message
* @return SentMessage|null
*/
public function __invoke(SendEmailMessage $message): ?SentMessage
{
$handler = $this->defaultHandler;
$sentMessage = $handler($message);
//your logic here
return $sentMessage;
}
}
MessengerBundle\MessageHandler\SendEmailMessageHandler:
autowire: true
autoconfigure: true
public: false
mailer.messenger.message_handler:
class: MessengerBundle\MessageHandler\SendEmailMessageHandler
If this async approach don't fits to you, you can try this hack to extend mail service by adding getSentMessage into it.
Upvotes: 2