From 43c1e77a887105853d870878771d275cce7023a1 Mon Sep 17 00:00:00 2001 From: Nyholm Date: Wed, 1 Jan 2020 22:40:09 +0100 Subject: [PATCH] [Mailer] Make sure you can pass custom headers to Mailgun --- .../Transport/MandrillApiTransportTest.php | 20 +++++++++++++++++++ .../Transport/MandrillApiTransport.php | 2 +- .../Transport/MailgunApiTransportTest.php | 19 ++++++++++++++++++ .../Mailgun/Transport/MailgunApiTransport.php | 2 +- .../Transport/PostmarkApiTransportTest.php | 20 +++++++++++++++++++ .../Transport/PostmarkApiTransport.php | 2 +- .../Transport/SendgridApiTransportTest.php | 17 ++++++++++++++++ .../Transport/SendgridApiTransport.php | 2 +- 8 files changed, 80 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Transport/MandrillApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Transport/MandrillApiTransportTest.php index 2bec482818..af4cdbeebe 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Transport/MandrillApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailchimp/Tests/Transport/MandrillApiTransportTest.php @@ -13,6 +13,9 @@ namespace Symfony\Component\Mailer\Bridge\Mailchimp\Tests\Transport; use PHPUnit\Framework\TestCase; use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillApiTransport; +use Symfony\Component\Mailer\Envelope; +use Symfony\Component\Mime\Address; +use Symfony\Component\Mime\Email; class MandrillApiTransportTest extends TestCase { @@ -41,4 +44,21 @@ class MandrillApiTransportTest extends TestCase ], ]; } + + public function testCustomHeader() + { + $email = new Email(); + $email->getHeaders()->addTextHeader('foo', 'bar'); + $envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]); + + $transport = new MandrillApiTransport('ACCESS_KEY'); + $method = new \ReflectionMethod(MandrillApiTransport::class, 'getPayload'); + $method->setAccessible(true); + $payload = $method->invoke($transport, $email, $envelope); + + $this->assertArrayHasKey('message', $payload); + $this->assertArrayHasKey('headers', $payload['message']); + $this->assertCount(1, $payload['message']['headers']); + $this->assertEquals('foo: bar', $payload['message']['headers'][0]); + } } diff --git a/src/Symfony/Component/Mailer/Bridge/Mailchimp/Transport/MandrillApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Mailchimp/Transport/MandrillApiTransport.php index 4a982501bd..af221ca66e 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailchimp/Transport/MandrillApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailchimp/Transport/MandrillApiTransport.php @@ -111,7 +111,7 @@ class MandrillApiTransport extends AbstractApiTransport continue; } - $payload['message']['headers'][] = $name.': '.$header->toString(); + $payload['message']['headers'][] = $name.': '.$header->getBodyAsString(); } return $payload; diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php index eb9838390a..f30fa0285c 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php @@ -13,6 +13,9 @@ namespace Symfony\Component\Mailer\Bridge\Mailgun\Tests\Transport; use PHPUnit\Framework\TestCase; use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunApiTransport; +use Symfony\Component\Mailer\Envelope; +use Symfony\Component\Mime\Address; +use Symfony\Component\Mime\Email; class MailgunApiTransportTest extends TestCase { @@ -45,4 +48,20 @@ class MailgunApiTransportTest extends TestCase ], ]; } + + public function testCustomHeader() + { + $json = json_encode(['foo' => 'bar']); + $email = new Email(); + $email->getHeaders()->addTextHeader('X-Mailgun-Variables', $json); + $envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]); + + $transport = new MailgunApiTransport('ACCESS_KEY', 'DOMAIN'); + $method = new \ReflectionMethod(MailgunApiTransport::class, 'getPayload'); + $method->setAccessible(true); + $payload = $method->invoke($transport, $email, $envelope); + + $this->assertArrayHasKey('h:x-mailgun-variables', $payload); + $this->assertEquals($json, $payload['h:x-mailgun-variables']); + } } diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php index 8d7b5cc7e2..cf40a8cf1e 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php @@ -114,7 +114,7 @@ class MailgunApiTransport extends AbstractApiTransport continue; } - $payload['h:'.$name] = $header->toString(); + $payload['h:'.$name] = $header->getBodyAsString(); } return $payload; diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php index b6568706f8..6996997b65 100644 --- a/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php @@ -13,6 +13,9 @@ namespace Symfony\Component\Mailer\Bridge\Postmark\Tests\Transport; use PHPUnit\Framework\TestCase; use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkApiTransport; +use Symfony\Component\Mailer\Envelope; +use Symfony\Component\Mime\Address; +use Symfony\Component\Mime\Email; class PostmarkApiTransportTest extends TestCase { @@ -41,4 +44,21 @@ class PostmarkApiTransportTest extends TestCase ], ]; } + + public function testCustomHeader() + { + $email = new Email(); + $email->getHeaders()->addTextHeader('foo', 'bar'); + $envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]); + + $transport = new PostmarkApiTransport('ACCESS_KEY'); + $method = new \ReflectionMethod(PostmarkApiTransport::class, 'getPayload'); + $method->setAccessible(true); + $payload = $method->invoke($transport, $email, $envelope); + + $this->assertArrayHasKey('Headers', $payload); + $this->assertCount(1, $payload['Headers']); + + $this->assertEquals(['Name' => 'foo', 'Value' => 'bar'], $payload['Headers'][0]); + } } diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php index 96dd8d4a65..610f858260 100644 --- a/src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php @@ -84,7 +84,7 @@ class PostmarkApiTransport extends AbstractApiTransport $payload['Headers'][] = [ 'Name' => $name, - 'Value' => $header->toString(), + 'Value' => $header->getBodyAsString(), ]; } diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php index f94ace1b2f..ab271d574c 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php @@ -13,6 +13,7 @@ namespace Symfony\Component\Mailer\Bridge\Sendgrid\Tests\Transport; use PHPUnit\Framework\TestCase; use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridApiTransport; +use Symfony\Component\Mailer\Envelope; use Symfony\Component\Mime\Address; use Symfony\Component\Mime\Email; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -149,4 +150,20 @@ class SendgridApiTransportTest extends TestCase $mailer->send($email); } + + public function testCustomHeader() + { + $email = new Email(); + $email->getHeaders()->addTextHeader('foo', 'bar'); + $envelope = new Envelope(new Address('alice@system.com'), [new Address('bob@system.com')]); + + $transport = new SendgridApiTransport('ACCESS_KEY'); + $method = new \ReflectionMethod(SendgridApiTransport::class, 'getPayload'); + $method->setAccessible(true); + $payload = $method->invoke($transport, $email, $envelope); + + $this->assertArrayHasKey('headers', $payload); + $this->assertArrayHasKey('foo', $payload['headers']); + $this->assertEquals('bar', $payload['headers']['foo']); + } } diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php index 1864e7a2ec..df90d21472 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php @@ -104,7 +104,7 @@ class SendgridApiTransport extends AbstractApiTransport continue; } - $payload['headers'][$name] = $header->toString(); + $payload['headers'][$name] = $header->getBodyAsString(); } return $payload;