10000 [Mailer] Restore X-Transport after failure · symfony/symfony@f829441 · GitHub
[go: up one dir, main page]

Skip to content

Commit f829441

Browse files
committed
[Mailer] Restore X-Transport after failure
1 parent f0ffa47 commit f829441

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

src/Symfony/Component/Mailer/Tests/Transport/TransportsTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Mailer\Tests\Transport;
1313

14+
use Exception;
1415
use PHPUnit\Framework\TestCase;
1516
use Symfony\Component\Mailer\Exception\InvalidArgumentException;
1617
use Symfony\Component\Mailer\Transport\TransportInterface;
@@ -64,4 +65,28 @@ public function testTransportDoesNotExist()
6465
$this->expectExceptionMessage('The "foobar" transport does not exist (available transports: "foo", "bar").');
6566
$transport->send($email);
6667
}
68+
69+
public function testTransportRestoredAfterFailure()
70+
{
71+
$exception = new Exception();
72+
73+
$fooTransport = $this->createMock(TransportInterface::class);
74+
$fooTransport->method('send')
75+
->willThrowException($exception);
76+
77+
$transport = new Transports([
78+
'foo' => $fooTransport,
79+
]);
80+
81+
$headers = (new Headers())->addTextHeader('X-Transport', 'foo');
82+
$email = new Message($headers, new TextPart('...'));
83+
84+
$this->expectExceptionObject($exception);
85+
86+
try {
87+
$transport->send($email);
88+
} finally {
89+
$this->assertEquals('foo', $email->getHeaders()->getHeaderBody('X-Transport'));
90+
}
91+
}
6792
}

src/Symfony/Component/Mailer/Transport/Transports.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Mailer\SentMessage;
1818
use Symfony\Component\Mime\Message;
1919
use Symfony\Component\Mime\RawMessage;
20+
use Throwable;
2021

2122
/**
2223
* @author Fabien Potencier <fabien@symfony.com>
@@ -59,7 +60,13 @@ public function send(RawMessage $message, Envelope $envelope = null): ?SentMessa
5960
throw new InvalidArgumentException(sprintf('The "%s" transport does not exist (available transports: "%s").', $transport, implode('", "', array_keys($this->transports))));
6061
}
6162

62-
return $this->transports[$transport]->send($message, $envelope);
63+
try {
64+
return $this->transports[$transport]->send($message, $envelope);
65+
} catch (Throwable $throwable) {
66+
$headers->addTextHeader('X-Transport', $transport);
67+
68+
throw $throwable;
69+
}
6370
}
6471

6572
public function __toString(): string

0 commit comments

Comments
 (0)
0