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 989175a

Browse filesBrowse files
committed
bug #44839 MailerInterface: failed exception contract when enabling messenger (Giorgio Premi)
This PR was merged into the 4.4 branch. Discussion ---------- MailerInterface: failed exception contract when enabling messenger | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | no | License | MIT | Doc PR | likely not required... The interface for MailerInterface::send states that exception for transport failures are sent as TransportExceptionInterface, which make perfectly sense and allows to create solid UI. If at later stage the Messenger component is enabled, the mail will be rewired into a dispatched message, which by default is synchronous. This cause all exception to be wrapped into HandlerFailedException which doesn't the interface contract. In the end the UI is broken, and the exception HandlerFailedException, even if caught, is totally unrelated to the usage context as it is only related to configuration details. This patch will unwrap the underlying MailTransportInterface exception if available for the handler exception. PS: don't know if make sense to add a phpunit test for this cross-component scenario, if so I'll try. Also, this will restore compatibility with interface, but I don't if it's to be considered a BC (strictly speaking, it may be) Commits ------- 4e29672 MailerInterface: failed exception contract when enabling messenger
2 parents 392d88e + 4e29672 commit 989175a
Copy full SHA for 989175a

File tree

1 file changed

+12
-1
lines changed
Filter options

1 file changed

+12
-1
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Mailer/Mailer.php
+12-1Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313

1414
use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
1515
use Symfony\Component\Mailer\Event\MessageEvent;
16+
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
1617
use Symfony\Component\Mailer\Messenger\SendEmailMessage;
1718
use Symfony\Component\Mailer\Transport\TransportInterface;
19+
use Symfony\Component\Messenger\Exception\HandlerFailedException;
1820
use Symfony\Component\Messenger\MessageBusInterface;
1921
use Symfony\Component\Mime\RawMessage;
2022
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -50,6 +52,15 @@ public function send(RawMessage $message, Envelope $envelope = null): void
5052
$this->dispatcher->dispatch($event);
5153
}
5254

53-
$this->bus->dispatch(new SendEmailMessage($message, $envelope));
55+
try {
56+
$this->bus->dispatch(new SendEmailMessage($message, $envelope));
57+
} catch (HandlerFailedException $e) {
58+
foreach ($e->getNestedExceptions() as $nested) {
59+
if ($nested instanceof TransportExceptionInterface) {
60+
throw $nested;
61+
}
62+
}
63+
throw $e;
64+
}
5465
}
5566
}

0 commit comments

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