feat: send mailings over MailJet smtp in dedicated worker process

This commit is contained in:
Björn Fromme
2026-08-12 15:47:04 +02:00
parent a5c98025d0
commit e0a9562fc6
14 changed files with 480 additions and 44 deletions
@@ -0,0 +1,61 @@
<?php
declare(strict_types=1);
namespace App\Tests\Email;
use App\Email\RemoveBusTransportHeaderListener;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Mailer\Envelope;
use Symfony\Component\Mailer\Event\MessageEvent;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email;
class RemoveBusTransportHeaderListenerTest extends TestCase
{
public function testTheHeaderIsGoneFromTheDeliveredMail(): void
{
$email = $this->createEmail();
(new RemoveBusTransportHeaderListener())($this->createEvent($email, queued: false));
$this->assertFalse($email->getHeaders()->has('X-Bus-Transport'));
}
/**
* Symfony reads the header off the queued message to pick the messenger transport, so
* removing it here would send the mailing over the shared queue after all.
*/
public function testTheHeaderSurvivesQueueing(): void
{
$email = $this->createEmail();
(new RemoveBusTransportHeaderListener())($this->createEvent($email, queued: true));
$this->assertTrue($email->getHeaders()->has('X-Bus-Transport'));
}
private function createEmail(): Email
{
$email = (new Email())
->from('[email protected]')
->to('[email protected]')
->subject('Betreff')
->text('Nachricht')
;
$email->getHeaders()->addTextHeader('X-Bus-Transport', 'mailing');
return $email;
}
private function createEvent(Email $email, bool $queued): MessageEvent
{
return new MessageEvent(
$email,
new Envelope(new Address('[email protected]'), [new Address('[email protected]')]),
'mailing',
$queued
);
}
}