8000 bug #35162 [Mailer] Make sure you can pass custom headers to Mailgun … · symfony/symfony@ca69626 · GitHub
[go: up one dir, main page]

Skip to content

Commit ca69626

Browse files
bug #35162 [Mailer] Make sure you can pass custom headers to Mailgun (Nyholm)
This PR was squashed before being merged into the 4.4 branch. Discussion ---------- [Mailer] Make sure you can pass custom headers to Mailgun | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | fix #35095 | License | MIT | Doc PR | I can only assume that there was a mistake to use `$header->toString()` since it makes no sense to include the header name here. That is why this is a bugfix and not a new feature. Without this fix my test will fail: ``` Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -'{"foo":"bar"}' +'X-Mailgun-Variables: {"foo":"bar"}' ``` There are a few similar places for other mailer bridges that looks like they have similar issues. I dont know those providers very well. I can spend time researching them and confirm if there are bugs there too. But first I want to make sure a fix like this is accepted. Commits ------- 43c1e77 [Mailer] Make sure you can pass custom headers to Mailgun
2 parents 6f6976a + 43c1e77 commit ca69626

File tree

8 files changed

+80
-4
lines changed

8 files changed

+80
-4
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillApiTransport;
16+
use Symfony\Component\Mailer\Envelope;
17+
use Symfony\Component\Mime\Address;
18+
use Symfony\Component\Mime\Email;
1619

1720
class MandrillApiTransportTest extends TestCase
1821
{
@@ -41,4 +44,21 @@ public function getTransportData()
4144
],
4245
];
4346
}
47+
48+
public function testCustomHeader()
49+
{
50+
$email = new Email();
51+
$email->getHeaders()->addTextHeader('foo', 'bar');
52+
$envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]);
53+
54+
$transport = new MandrillApiTransport('ACCESS_KEY');
55+
$method = new \ReflectionMethod(MandrillApiTransport::class, 'getPayload');
56+
$method->setAccessible(true);
57+
$payload = $method->invoke($transport, $email, $envelope);
58+
59+
$this->assertArrayHasKey('message', $payload);
60+
$this->assertArrayHasKey('headers', $payload['message']);
61+
$this->assertCount(1, $payload['message']['headers']);
62+
$this->assertEquals('foo: bar', $payload['message']['headers'][0]);
63+
}
4464
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ private function getPayload(Email $email, Envelope $envelope): array
111111
continue;
112112
}
113113

114-
$payload['message']['headers'][] = $name.': '.$header->toString();
114+
$payload['message']['headers'][] = $name.': '.$header->getBodyAsString();
115115
}
116116

117117
return $payload;

src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunApiTransport;
16+
use Symfony\Component\Mailer\Envelope;
17+
use Symfony\Component\Mime\Address;
18+
use Symfony\Component\Mime\Email;
1619

1720
class MailgunApiTransportTest extends TestCase
1821
{
@@ -45,4 +48,20 @@ public function getTransportData()
4548
],
4649
];
4750
}
51+
52+
public function testCustomHeader()
53+
{
54+
$json = json_encode(['foo' => 'bar']);
55+
$email = new Email();
56+
$email->getHeaders()->addTextHeader('X-Mailgun-Variables', $json);
57+
$envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]);
58+
59+
$transport = new MailgunApiTransport('ACCESS_KEY', 'DOMAIN');
60+
$method = new \ReflectionMethod(MailgunApiTransport::class, 'getPayload');
61+
$method->setAccessible(true);
62+
$payload = $method->invoke($transport, $email, $envelope);
63+
64+
$this->assertArrayHasKey('h:x-mailgun-variables', $payload);
65+
$this->assertEquals($json, $payload['h:x-mailgun-variables']);
66+
}
4867
}

src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ private function getPayload(Email $email, Envelope $envelope): array
114114
continue;
115115
}
116116

117-
$payload['h:'.$name] = $header->toString();
117+
$payload['h:'.$name] = $header->getBodyAsString();
118118
}
119119

120120
return $payload;

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkApiTransport;
16+
use Symfony\Component\Mailer\Envelope;
17+
use Symfony\Component\Mime\Address;
18+
use Symfony\Component\Mime\Email;
1619

1720
class PostmarkApiTransportTest extends TestCase
1821
{
@@ -41,4 +44,21 @@ public function getTransportData()
4144
],
4245
];
4346
}
47+
48+
public function testCustomHeader()
49+
{
50+
$email = new Email();
51+
$email->getHeaders()->addTextHeader('foo', 'bar');
52+
$envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]);
53+
54+
$transport = new PostmarkApiTransport('ACCESS_KEY');
55+
$method = new \ReflectionMethod(PostmarkApiTransport::class, 'getPayload');
56+
$method->setAccessible(true);
57+
$payload = $method->invoke($transport, $email, $envelope);
58+
59+
$this->assertArrayHasKey('Headers', $payload);
60+
$this->assertCount(1, $payload['Headers']);
61+
62+
$this->assertEquals(['Name' => 'foo', 'Value' => 'bar'], $payload['Headers'][0]);
63+
}
4464
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ private function getPayload(Email $email, Envelope $envelope): array
8484

8585
$payload['Headers'][] = [
8686
'Name' => $name,
87-
'Value' => $header->toString(),
87+
'Value' => $header->getBodyAsString(),
8888
];
8989
}
9090

src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridApiTransport;
16+
use Symfony\Component\Mailer\Envelope;
1617
use Symfony\Component\Mime\Address;
1718
use Symfony\Component\Mime\Email;
1819
use Symfony\Contracts\HttpClient\HttpClientInterface;
@@ -149,4 +150,20 @@ public function testLineBreaksInEncodedAttachment()
149150

150151
$mailer->send($email);
151152
}
153+
154+
public function testCustomHeader()
155+
{
156+
$email = new Email();
157+
$email->getHeaders()->addTextHeader('foo', 'bar');
158+
$envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]);
159+
160+
$transport = new SendgridApiTransport('ACCESS_KEY');
161+
$method = new \ReflectionMethod(SendgridApiTransport::class, 'getPayload');
162+
$method->setAccessible(true);
163+
$payload = $method->invoke($transport, $email, $envelope);
164+
165+
$this->assertArrayHasKey('headers', $payload);
166+
$this->assertArrayHasKey('foo', $payload['headers']);
167+
$this->assertEquals('bar', $payload['headers']['foo']);
168+
}
152169
}

src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private function getPayload(Email $email, Envelope $envelope): array
104104
continue;
105105
}
106106

107-
$payload['headers'][$name] = $header->toString();
107+
$payload['headers'][$name] = $header->getBodyAsString();
108108
}
109109

110110
return $payload;

0 commit comments

Comments
 (0)
0