|
18 | 18 | use Barryvdh\Debugbar\Storage\SocketStorage;
|
19 | 19 | use Barryvdh\Debugbar\Storage\FilesystemStorage;
|
20 | 20 | use DebugBar\Bridge\MonologCollector;
|
21 |
| -use DebugBar\Bridge\SwiftMailer\SwiftLogCollector; |
22 |
| -use DebugBar\Bridge\SwiftMailer\SwiftMailCollector; |
| 21 | +use DebugBar\Bridge\Symfony\SymfonyMailCollector; |
23 | 22 | use DebugBar\DataCollector\ConfigCollector;
|
24 | 23 | use DebugBar\DataCollector\DataCollectorInterface;
|
25 | 24 | use DebugBar\DataCollector\ExceptionsCollector;
|
|
36 | 35 | use Exception;
|
37 | 36 | use Throwable;
|
38 | 37 | use Illuminate\Contracts\Foundation\Application;
|
| 38 | +use Illuminate\Mail\Events\MessageSent; |
39 | 39 | use Illuminate\Session\SessionManager;
|
40 | 40 | use Illuminate\Support\Str;
|
41 | 41 | use Symfony\Component\HttpFoundation\Request;
|
42 | 42 | use Symfony\Component\HttpFoundation\Response;
|
| 43 | +use Symfony\Component\Mailer\Envelope; |
| 44 | +use Symfony\Component\Mailer\SentMessage; |
| 45 | +use Symfony\Component\Mailer\Transport\AbstractTransport; |
| 46 | +use Symfony\Component\Mime\RawMessage; |
43 | 47 |
|
44 | 48 | /**
|
45 | 49 | * Debug bar subclass which adds all without Request and with LaravelCollector.
|
@@ -440,16 +444,42 @@ function ($event, $params) use ($queryCollector) {
|
440 | 444 | }
|
441 | 445 | }
|
442 | 446 |
|
443 |
| - if ($this->shouldCollect('mail', true) && class_exists('Illuminate\Mail\MailServiceProvider') && $this->checkVersion('9.0', '<')) { |
| 447 | + if ($this->shouldCollect('mail', true) && class_exists('Illuminate\Mail\MailServiceProvider') && isset($this->app['events'])) { |
444 | 448 | try {
|
445 |
| - $mailer = $this->app['mailer']->getSwiftMailer(); |
446 |
| - $this->addCollector(new SwiftMailCollector($mailer)); |
447 |
| - if ( |
448 |
| - $this->app['config']->get('debugbar.options.mail.full_log') && $this->hasCollector( |
449 |
| - 'messages' |
450 |
| - ) |
451 |
| - ) { |
452 |
| - $this['messages']->aggregate(new SwiftLogCollector($mailer)); |
| 449 | + $mailCollector = new SymfonyMailCollector(); |
| 450 | + $this->addCollector($mailCollector); |
| 451 | + $this->app['events']->listen(function (MessageSent $event) use ($mailCollector) { |
| 452 | + $mailCollector->addSymfonyMessage($event->sent->getSymfonySentMessage()); |
| 453 | + }); |
| 454 | + |
| 455 | + if ($this->app['config']->get('debugbar.options.mail.full_log')) { |
| 456 | + $mailCollector->showMessageDetail(); |
| 457 | + } |
| 458 | + |
| 459 | + if ($debugbar->hasCollector('time') && $this->app['config']->get('debugbar.options.mail.timeline')) { |
| 460 | + $transport = $this->app['mailer']->getSymfonyTransport(); |
| 461 | + $this->app['mailer']->setSymfonyTransport(new class($transport, $this) extends AbstractTransport{ |
| 462 | + private $originalTransport; |
| 463 | + private $laravelDebugbar; |
| 464 | + |
| 465 | + public function __construct($transport, $laravelDebugbar) |
| 466 | + { |
| 467 | + $this->originalTransport = $transport; |
| 468 | + $this->laravelDebugbar = $laravelDebugbar; |
| 469 | + } |
| 470 | + public function send(RawMessage $message, Envelope $envelope = null): ?SentMessage |
| 471 | + { |
| 472 | + return $this->laravelDebugbar['time']->measure( |
| 473 | + 'mail: '. Str::limit($message->getSubject(), 100), |
| 474 | + function () use ($message, $envelope) { |
| 475 | + return $this->originalTransport->send($message, $envelope); |
| 476 | + }, |
| 477 | + 'mail' |
| 478 | + ); |
| 479 | + } |
| 480 | + protected function doSend(SentMessage $message): void {} |
| 481 | + public function __toString(): string{ $this->originalTransport->__toString(); } |
| 482 | + }); |
453 | 483 | }
|
454 | 484 | } catch (\Exception $e) {
|
455 | 485 | $this->addThrowable(
|
|
0 commit comments