Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit cde7977

Browse filesBrowse files
committed
[Mailer] added message events logger
1 parent 37265de commit cde7977
Copy full SHA for cde7977

File tree

9 files changed

+164
-4
lines changed
Filter options

9 files changed

+164
-4
lines changed

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,10 @@ private function registerProfilerConfiguration(array $config, ContainerBuilder $
553553
$loader->load('messenger_debug.xml');
554554
}
555555

556+
if (class_exists(Mailer::class)) {
557+
$loader->load('mailer_debug.xml');
558+
}
559+
556560
$container->setParameter('profiler_listener.only_exceptions', $config['only_exceptions']);
557561
$container->setParameter('profiler_listener.only_master_requests', $config['only_master_requests']);
558562

+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<services>
8+
<service id="mailer.logger_message_listener" class="Symfony\Component\Mailer\EventListener\MessageLoggerListener">
9+
<tag name="kernel.event_subscriber"/>
10+
</service>
11+
</services>
12+
</container>

‎src/Symfony/Component/Mailer/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
4.4.0
55
-----
66

7+
* Added `MessageEvents` and `MessageLoggerListener` to allow collecting sent emails
78
* [BC BREAK] `TransportInterface` has a new `getName()` method
89
* [BC BREAK] Classes `AbstractApiTransport` and `AbstractHttpTransport` moved under `Transport` sub-namespace.
910
* [BC BREAK] Transports depend on `Symfony\Contracts\EventDispatcher\EventDispatcherInterface`

‎src/Symfony/Component/Mailer/Event/MessageEvent.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Event/MessageEvent.php
+16-2Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,23 @@
1616
use Symfony\Component\Mime\RawMessage;
1717

1818
/**
19-
* Allows the transformation of a Message.
19+
* Allows the transformation of a Message and the SMTP Envelope before the email is sent.
2020
*
2121
* @author Fabien Potencier <fabien@symfony.com>
2222
*/
2323
class MessageEvent extends Event
2424
{
2525
private $message;
2626
private $envelope;
27+
private $transportName;
28+
private $queued;
2729

28-
public function __construct(RawMessage $message, SmtpEnvelope $envelope)
30+
public function __construct(RawMessage $message, SmtpEnvelope $envelope, string $transportName, bool $queued = false)
2931
{
3032
$this->message = $message;
3133
$this->envelope = $envelope;
34+
$this->transportName = $transportName;
35+
$this->queued = $queued;
3236
}
3337

3438
public function getMessage(): RawMessage
@@ -50,4 +54,14 @@ public function setEnvelope(SmtpEnvelope $envelope): void
5054
{
5155
$this->envelope = $envelope;
5256
}
57+
58+
public function getTransportName(): string
59+
{
60+
return $this->transportName;
61+
}
62+
63+
public function isQueued(): bool
64+
{
65+
return $this->queued;
66+
}
5367
}
+56Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Event;
13+
14+
/**
15+
* @author Fabien Potencier <fabien@symfony.com>
16+
*/
17+
class MessageEvents
18+
{
19+
private $events = [];
20+
private $transports = [];
21+
22+
public function add(MessageEvent $event): void
23+
{
24+
$this->events[] = $event;
25+
$this->transports[$event->getTransportName()] = true;
26+
}
27+
28+
public function getTransports(): array
29+
{
30+
return array_keys($this->transports);
31+
}
32+
33+
/**
34+
* @return MessageEvent[]
35+
*/
36+
public function getEvents(string $name = null): array
37+
{
38+
if (null === $name) {
39+
return $this->events;
40+
}
41+
42+
$events = [];
43+
foreach ($this->events as $event) {
44+
if ($name === $event->getTransportName()) {
45+
$events[] = $event;
46+
}
47+
}
48+
49+
return $events;
50+
}
51+
52+
public function getMessageCount(string $name = null): int
53+
{
54+
return \count($this->getEvents($name));
55+
}
56+
}
+57Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\EventListener;
13+
14+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
15+
use Symfony\Component\Mailer\Event\MessageEvent;
16+
use Symfony\Component\Mailer\Event\MessageEvents;
17+
use Symfony\Contracts\Service\ResetInterface;
18+
19+
/**
20+
* Logs Messages.
21+
*
22+
* @author Fabien Potencier <fabien@symfony.com>
23+
*/
24+
class MessageLoggerListener implements EventSubscriberInterface, ResetInterface
25+
{
26+
private $events;
27+
28+
public function __construct()
29+
{
30+
$this->events = new MessageEvents();
31+
}
32+
33+
/**
34+
* {@inheritdoc}
35+
*/
36+
public function reset()
37+
{
38+
$this->events = new MessageEvents();
39+
}
40+
41+
public function onMessage(MessageEvent $event): void
42+
{
43+
$this->events->add($event);
44+
}
45+
46+
public function getEvents(): MessageEvents
47+
{
48+
return $this->events;
49+
}
50+
51+
public static function getSubscribedEvents()
52+
{
53+
return [
54+
MessageEvent::class => ['onMessage', -255],
55+
];
56+
}
57+
}

‎src/Symfony/Component/Mailer/Mailer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Mailer.php
+15Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\Mailer;
1313

14+
use Symfony\Component\Mailer\Event\MessageEvent;
15+
use Symfony\Component\Mailer\Exception\TransportException;
1416
use Symfony\Component\Mailer\Messenger\SendEmailMessage;
1517
use Symfony\Component\Mailer\Transport\TransportInterface;
1618
use Symfony\Component\Messenger\MessageBusInterface;
@@ -38,6 +40,19 @@ public function send(RawMessage $message, SmtpEnvelope $envelope = null): void
3840
return;
3941
}
4042

43+
$message = clone $message;
44+
if (null !== $envelope) {
45+
$envelope = clone $envelope;
46+
} else {
47+
try {
48+
$envelope = new DelayedSmtpEnvelope($message);
49+
} catch (\Exception $e) {
50+
throw new TransportException('Cannot send message without a valid envelope.', 0, $e);
51+
}
52+
}
53+
$event = new MessageEvent($message, $envelope, $this->transport->getName());
54+
$this->dispatcher->dispatch($event);
55+
4156
$this->bus->dispatch(new SendEmailMessage($message, $envelope));
4257
}
4358
}

‎src/Symfony/Component/Mailer/Transport/AbstractTransport.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Transport/AbstractTransport.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public function send(RawMessage $message, SmtpEnvelope $envelope = null): ?SentM
6969
}
7070
}
7171

72-
$event = new MessageEvent($message, $envelope);
72+
$event = new MessageEvent($message, $envelope, $this->getName(), true);
7373
$this->dispatcher->dispatch($event);
7474
$envelope = $event->getEnvelope();
7575
if (!$envelope->getRecipients()) {

‎src/Symfony/Component/Mailer/composer.json

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/composer.json
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"egulias/email-validator": "^2.0",
2121
"psr/log": "~1.0",
2222
"symfony/event-dispatcher": "^4.3",
23-
"symfony/mime": "^4.3.3|^5.0"
23+
"symfony/mime": "^4.3.3|^5.0",
24+
"symfony/service-contracts": "^1.1"
2425
},
2526
"require-dev": {
2627
"symfony/amazon-mailer": "^4.4|^5.0",

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.