8000 bug #45274 [Mailer] allow Mailchimp to handle multiple TagHeader's (k… · symfony/symfony@d7da823 · GitHub
[go: up one dir, main page]

Skip to content

Commit d7da823

Browse files
committed
bug #45274 [Mailer] allow Mailchimp to handle multiple TagHeader's (kbond)
This PR was merged into the 5.4 branch. Discussion ---------- [Mailer] allow Mailchimp to handle multiple TagHeader's | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | n/a | License | MIT | Doc PR | n/a When adding multiple tags (for transports that support this), it's recommended to add multiple `TagHeader`'s instead of a single header with a transport-specific way to separating. ```php $email->getHeaders()->add(new TagHeader('tag1')); $email->getHeaders()->add(new TagHeader('tag2')); // not $email->getHeaders()->add(new TagHeader('tag1,tag2')); ``` This fixes mailchimp to allow this. I've left the comma separated method intact as to not cause a BC break. Commits ------- ae62a78 [Mailer] allow Mailchimp to handle multiple TagHeader's
2 parents 6413b64 + ae62a78 commit d7da823

File tree

5 files changed

+16
-5
lines changed

5 files changed

+16
-5
lines changed

src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Transport/MandrillApiTransportTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ public function testCanHaveMultipleTags()
148148
{
149149
$email = new Email();
150150
$email->getHeaders()->add(new TagHeader('password-reset,user'));
151+
$email->getHeaders()->add(new TagHeader('another'));
151152
$envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]);
152153

153154
$transport = new MandrillApiTransport('ACCESS_KEY');
@@ -158,6 +159,6 @@ public function testCanHaveMultipleTags()
158159
$this->assertArrayHasKey('message', $payload);
159160
$this->assertArrayNotHasKey('headers', $payload['message']);
160161
$this->assertArrayHasKey('tags', $payload['message']);
161-
$this->assertSame(['password-reset', 'user'], $payload['message']['tags']);
162+
$this->assertSame(['password-reset', 'user', 'another'], $payload['message']['tags']);
162163
}
163164
}

src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Transport/MandrillHttpTransportTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ public function testTagAndMetadataHeaders()
112112
$email = new Email();
113113
$email->getHeaders()->addTextHeader('foo', 'bar');
114114
$email->getHeaders()->add(new TagHeader('password-reset,user'));
115+
$email->getHeaders()->add(new TagHeader('another'));
115116
$email->getHeaders()->add(new MetadataHeader('Color', 'blue'));
116117
$email->getHeaders()->add(new MetadataHeader('Client-ID', '12345'));
117118

@@ -122,7 +123,7 @@ public function testTagAndMetadataHeaders()
122123

123124
$this->assertCount(3, $email->getHeaders()->toArray());
124125
$this->assertSame('foo: bar', $email->getHeaders()->get('FOO')->toString());
125-
$this->assertSame('X-MC-Tags: password-reset,user', $email->getHeaders()->get('X-MC-Tags')->toString());
126+
$this->assertSame('X-MC-Tags: password-reset,user,another', $email->getHeaders()->get('X-MC-Tags')->toString());
126127
$this->assertSame('X-MC-Metadata: '.json_encode(['Color' => 'blue', 'Client-ID' => '12345']), $email->getHeaders()->get('X-MC-Metadata')->toString());
127128
}
128129
}

src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Transport/MandrillSmtpTransportTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public function testTagAndMetadataHeaders()
2424
$email = new Email();
2525
$email->getHeaders()->addTextHeader('foo', 'bar');
2626
$email->getHeaders()->add(new TagHeader('password-reset,user'));
27+
$email->getHeaders()->add(new TagHeader('another'));
2728
$email->getHeaders()->add(new MetadataHeader('Color', 'blue'));
2829
$email->getHeaders()->add(new MetadataHeader('Client-ID', '12345'));
2930

@@ -34,7 +35,7 @@ public function testTagAndMetadataHeaders()
3435

3536
$this->assertCount(3, $email->getHeaders()->toArray());
3637
$this->assertSame('foo: bar', $email->getHeaders()->get('FOO')->toString());
37-
$this->assertSame('X-MC-Tags: password-reset,user', $email->getHeaders()->get('X-MC-Tags')->toString());
38+
$this->assertSame('X-MC-Tags: password-reset,user,another', $email->getHeaders()->get('X-MC-Tags')->toString());
3839
$this->assertSame('X-MC-Metadata: '.json_encode(['Color' => 'blue', 'Client-ID' => '12345']), $email->getHeaders()->get('X-MC-Metadata')->toString());
3940
}
4041
}

src/Symfony/Component/Mailer/Bridge/Mailchimp/Transport/MandrillApiTransport.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,10 @@ private function getPayload(Email $email, Envelope $envelope): array
124124
}
125125

126126
if ($header instanceof TagHeader) {
127-
$payload['message']['tags'] = explode(',', $header->getValue());
127+
$payload['message']['tags'] = array_merge(
128+
$payload['message']['tags'] ?? [],
129+
explode(',', $header->getValue())
130+
);
128131

129132
continue;
130133
}

src/Symfony/Component/Mailer/Bridge/Mailchimp/Transport/MandrillHeadersTrait.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,22 @@ private function addMandrillHeaders(Message $message): void
3636
{
3737
$headers = $message->getHeaders();
3838
$metadata = [];
39+
$tags = [];
3940

4041
foreach ($headers->all() as $name => $header) {
4142
if ($header instanceof TagHeader) {
42-
$headers->addTextHeader('X-MC-Tags', $header->getValue());
43+
$tags[] = $header->getValue();
4344
$headers->remove($name);
4445
} elseif ($header instanceof MetadataHeader) {
4546
$metadata[$header->getKey()] = $header->getValue();
4647
$headers->remove($name);
4748
}
4849
}
4950

51+
if ($tags) {
52+
$headers->addTextHeader('X-MC-Tags', implode(',', $tags));
53+
}
54+
5055
if ($metadata) {
5156
$headers->addTextHeader('X-MC-Metadata', json_encode($metadata));
5257
}

0 commit comments

Comments
 (0)
0