8000 bug #45275 [Mailer] ensure only a single tag can be used with Postmar… · symfony/symfony@6413b64 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6413b64

Browse files
committed
bug #45275 [Mailer] ensure only a single tag can be used with Postmark (kbond)
This PR was merged into the 5.4 branch. Discussion ---------- [Mailer] ensure only a single tag can be used with Postmark | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | n/a | License | MIT | Doc PR | n/a Postmark only allows a single tag per email. This changes throws an exception if another is added. Commits ------- 84b7cb4 [Postmark] ensure only a single tag can be used with Postmark
2 parents 98e6d82 + 84b7cb4 commit 6413b64

File tree

4 files changed

+43
-0
lines changed

4 files changed

+43
-0
lines changed

src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkApiTransport;
1919
use Symfony\Component\Mailer\Envelope;
2020
use Symfony\Component\Mailer\Exception\HttpTransportException;
21+
use Symfony\Component\Mailer\Exception\TransportException;
2122
use Symfony\Component\Mailer\Header\MetadataHeader;
2223
use Symfony\Component\Mailer\Header\TagHeader;
2324
use Symfony\Component\Mime\Address;
@@ -147,4 +148,20 @@ public function testTagAndMetadataAndMessageStreamHeaders()
147148
$this->assertSame(['Color' => 'blue', 'Client-ID' => '12345'], $payload['Metadata']);
148149
$this->assertSame('broadcasts', $payload['MessageStream']);
149150
}
151+
152+
public function testMultipleTagsAreNotAllowed()
153+
{
154+
$email = new Email();
155+
$email->getHeaders()->add(new TagHeader('tag1'));
156+
$email->getHeaders()->add(new TagHeader('tag2'));
157+
$envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]);
158+
159+
$transport = new PostmarkApiTransport('ACCESS_KEY');
160+
$method = new \ReflectionMethod(PostmarkApiTransport::class, 'getPayload');
161+
$method->setAccessible(true);
162+
163+
$this->expectException(TransportException::class);
164+
165+
$method->invoke($transport, $email, $envelope);
166+
}
150167
}

src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkSmtpTransportTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Mailer\Bridge\Postmark\Transport\MessageStreamHeader;
1616
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkSmtpTransport;
17+
use Symfony\Component\Mailer\Exception\TransportException;
1718
use Symfony\Component\Mailer\Header\MetadataHeader;
1819
use Symfony\Component\Mailer\Header\TagHeader;
1920
use Symfony\Component\Mime\Email;
@@ -57,4 +58,19 @@ public function testTagAndMetadataAndMessageStreamHeaders()
5758
$this->assertSame('X-PM-Metadata-Client-ID: 12345', $email->getHeaders()->get('X-PM-Metadata-Client-ID')->toString());
5859
$this->assertSame('X-PM-Message-Stream: broadcasts', $email->getHeaders()->get('X-PM-Message-Stream')->toString());
5960
}
61+
62+
public function testMultipleTagsAreNotAllowed()
63+
{
64+
$email = new Email();
65+
$email->getHeaders()->add(new TagHeader('tag1'));
66+
$email->getHeaders()->add(new TagHeader('tag2'));
67+
68+
$transport = new PostmarkSmtpTransport('ACCESS_KEY');
69+
$method = new \ReflectionMethod(PostmarkSmtpTransport::class, 'addPostmarkHeaders');
70+
$method->setAccessible(true);
71+
72+
$this->expectException(TransportException::class);
73+
74+
$method->invoke($transport, $email);
75+
}
6076
}

src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Psr\Log\LoggerInterface;
1616
use Symfony\Component\Mailer\Envelope;
1717
use Symfony\Component\Mailer\Exception\HttpTransportException;
18+
use Symfony\Component\Mailer\Exception\TransportException;
1819
use Symfony\Component\Mailer\Header\MetadataHeader;
1920
use Symfony\Component\Mailer\Header\TagHeader;
2021
use Symfony\Component\Mailer\SentMessage;
@@ -97,6 +98,10 @@ private function getPayload(Email $email, Envelope $envelope): array
9798
}
9899

99100
if ($header instanceof TagHeader) {
101+
if (isset($payload['Tag'])) {
102+
throw new TransportException('Postmark only allows a single tag per email.');
103+
}
104+
100105
$payload['Tag'] = $header->getValue();
101106

102107
continue;

src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkSmtpTransport.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Psr\EventDispatcher\EventDispatcherInterface;
1515
use Psr\Log\LoggerInterface;
1616
use Symfony\Component\Mailer\Envelope;
17+
use Symfony\Component\Mailer\Exception\TransportException;
1718
use Symfony\Component\Mailer\Header\MetadataHeader;
1819
use Symfony\Component\Mailer\Header\TagHeader;
1920
use Symfony\Component\Mailer\SentMessage;
@@ -53,6 +54,10 @@ private function addPostmarkHeaders(Message $message): void
5354

5455
foreach ($headers->all() as $name => $header) {
5556
if ($header instanceof TagHeader) {
57+
if ($headers->has('X-PM-Tag')) {
58+
throw new TransportException('Postmark only allows a single tag per email.');
59+
}
60+
5661
$headers->addTextHeader('X-PM-Tag', $header->getValue());
5762
$headers->remove($name);
5863
}

0 commit comments

Comments
 (0)
0