Skip to content

Commit 8f6045d

Browse files
authored
Add SymfonyMailCollector (php-debugbar#554)
* Add SymfonyMailCollector * add examples for SymfonyMailCollector
1 parent 17ec048 commit 8f6045d

File tree

7 files changed

+158
-0
lines changed

7 files changed

+158
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# Changelog
2+
2023-09-08
3+
4+
- Add SymfonyMailCollector (#554)
5+
26
2021-12-21
37

48
- Add support for `symfony/var-dumper^6` package

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Includes collectors for:
2727
- [Monolog](https://github.com/Seldaek/monolog)
2828
- [Propel](http://propelorm.org/)
2929
- [Slim](http://slimframework.com)
30+
- [Symfony Mailer](https://symfony.com/doc/current/mailer.html)
3031
- [Swift Mailer](http://swiftmailer.org/)
3132
- [Twig](http://twig.symfony.com/)
3233

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"require": {
3+
"symfony/event-dispatcher": "*",
4+
"symfony/mailer": "*"
5+
}
6+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
use DebugBar\Bridge\Symfony\SymfonyMailCollector;
4+
use DebugBar\DataCollector\MessagesCollector;
5+
use Symfony\Component\EventDispatcher\EventDispatcher;
6+
use Symfony\Component\Mailer\Event\SentMessageEvent;
7+
use Symfony\Component\Mailer\Mailer;
8+
use Symfony\Component\Mailer\Transport\AbstractTransport;
9+
use Symfony\Component\Mime\Email;
10+
11+
include __DIR__ . '/vendor/autoload.php';
12+
include __DIR__ . '/../../bootstrap.php';
13+
14+
$debugbarRenderer->setBaseUrl('../../../src/DebugBar/Resources');
15+
16+
$mailCollector = new SymfonyMailCollector();
17+
$debugbar->addCollector($mailCollector);
18+
$logger = new MessagesCollector('mails');
19+
$debugbar['messages']->aggregate($logger);
20+
21+
// Add even listener for SentMessageEvent
22+
$dispatcher = new EventDispatcher();
23+
$dispatcher->addListener(SentMessageEvent::class, function (SentMessageEvent $event) use ($mailCollector): void {
24+
$mailCollector->addSymfonyMessage($event->getMessage());
25+
});
26+
27+
// Creates NullTransport Mailer for testing
28+
$mailer = new Mailer(new class ($dispatcher, $logger) extends AbstractTransport {
29+
protected function doSend(\Symfony\Component\Mailer\SentMessage $message): void
30+
{
31+
$this->getLogger()->debug('Sending message "'.$message->getOriginalMessage()->getSubject().'"');
32+
}
33+
public function __toString(): string{ return 'null://'; }
34+
});
35+
36+
$email = (new Email())
37+
38+
39+
40+
//->bcc('[email protected]')
41+
//->replyTo('[email protected]')
42+
//->priority(Email::PRIORITY_HIGH)
43+
->subject('Wonderful Subject')
44+
->text('Here is the message itself');
45+
46+
$mailer->send($email);
47+
48+
render_demo_page();

demo/index.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
<li><a href="bridge/propel">Propel</a></li>
4343
<li><a href="bridge/slim">Slim</a></li>
4444
<li><a href="bridge/swiftmailer">Swift mailer</a></li>
45+
<li><a href="bridge/symfonymailer">Symfony mailer</a></li>
4546
<li><a href="bridge/twig">Twig</a></li>
4647
</ul>
4748
<?php

docs/bridge_collectors.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,20 @@ Display log messages and sent mail using `DebugBar\Bridge\SwiftMailer\SwiftLogCo
8686
$debugbar['messages']->aggregate(new DebugBar\Bridge\SwiftMailer\SwiftLogCollector($mailer));
8787
$debugbar->addCollector(new DebugBar\Bridge\SwiftMailer\SwiftMailCollector($mailer));
8888

89+
## Symfony Mailer
90+
91+
https://symfony.com/doc/current/mailer.html
92+
93+
Display log messages and sent mail using `DebugBar\Bridge\Symfony\SymfonyMailCollector`
94+
95+
use Symfony\Component\Mailer\Event\SentMessageEvent;
96+
97+
$mailCollector = new DebugBar\Bridge\Symfony\SymfonyMailCollector();
98+
$debugbar->addCollector($mailCollector);
99+
$eventDispatcher->addListener(SentMessageEvent::class, function (SentMessageEvent $event) use (&$mailCollector): void {
100+
$mailCollector->addSymfonyMessage($event->getMessage());
101+
});
102+
89103
## Twig
90104

91105
http://twig.sensiolabs.org/
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<?php
2+
3+
namespace DebugBar\Bridge\Symfony;
4+
5+
use DebugBar\DataCollector\AssetProvider;
6+
use DebugBar\DataCollector\DataCollector;
7+
use DebugBar\DataCollector\Renderable;
8+
9+
/**
10+
* Collects data about sent mail events
11+
*
12+
* https://github.com/symfony/mailer
13+
*/
14+
class SymfonyMailCollector extends DataCollector implements Renderable, AssetProvider
15+
{
16+
/** @var array */
17+
private $messages = array();
18+
19+
/** @var bool */
20+
private $showDetailed = false;
21+
22+
/** @param \Symfony\Component\Mailer\SentMessage $message */
23+
public function addSymfonyMessage($message)
24+
{
25+
$this->messages[] = $message->getOriginalMessage();
26+
}
27+
28+
public function showMessageDetail()
29+
{
30+
$this->showDetailed = true;
31+
}
32+
33+
public function collect()
34+
{
35+
$mails = array();
36+
37+
foreach ($this->messages as $message) {
38+
/* @var \Symfony\Component\Mime\Message $message */
39+
$mails[] = array(
40+
'to' => array_map(function ($address) {
41+
/* @var \Symfony\Component\Mime\Address $address */
42+
return $address->toString();
43+
}, $message->getTo()),
44+
'subject' => $message->getSubject(),
45+
'headers' => ($this->showDetailed ? $message : $message->getHeaders())->toString(),
46+
);;
47+
}
48+
49+
return array(
50+
'count' => count($mails),
51+
'mails' => $mails,
52+
);
53+
}
54+
55+
public function getName()
56+
{
57+
return 'symfonymailer_mails';
58+
}
59+
60+
public function getWidgets()
61+
{
62+
return array(
63+
'emails' => array(
64+
'icon' => 'inbox',
65+
'widget' => 'PhpDebugBar.Widgets.MailsWidget',
66+
'map' => 'symfonymailer_mails.mails',
67+
'default' => '[]',
68+
'title' => 'Mails'
69+
),
70+
'emails:badge' => array(
71+
'map' => 'symfonymailer_mails.count',
72+
'default' => 'null'
73+
)
74+
);
75+
}
76+
77+
public function getAssets()
78+
{
79+
return array(
80+
'css' => 'widgets/mails/widget.css',
81+
'js' => 'widgets/mails/widget.js'
82+
);
83+
}
84+
}

0 commit comments

Comments
 (0)