[Mailer] Make sure you can pass custom headers to Mailgun

This commit is contained in:
Nyholm 2020-01-01 22:40:09 +01:00 committed by Nicolas Grekas
parent 6f6976a192
commit 43c1e77a88
8 changed files with 80 additions and 4 deletions

View File

@ -13,6 +13,9 @@ namespace Symfony\Component\Mailer\Bridge\Mailchimp\Tests\Transport;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillApiTransport; 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 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]);
}
} }

View File

@ -111,7 +111,7 @@ class MandrillApiTransport extends AbstractApiTransport
continue; continue;
} }
$payload['message']['headers'][] = $name.': '.$header->toString(); $payload['message']['headers'][] = $name.': '.$header->getBodyAsString();
} }
return $payload; return $payload;

View File

@ -13,6 +13,9 @@ namespace Symfony\Component\Mailer\Bridge\Mailgun\Tests\Transport;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunApiTransport; 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 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']);
}
} }

View File

@ -114,7 +114,7 @@ class MailgunApiTransport extends AbstractApiTransport
continue; continue;
} }
$payload['h:'.$name] = $header->toString(); $payload['h:'.$name] = $header->getBodyAsString();
} }
return $payload; return $payload;

View File

@ -13,6 +13,9 @@ namespace Symfony\Component\Mailer\Bridge\Postmark\Tests\Transport;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkApiTransport; 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 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]);
}
} }

View File

@ -84,7 +84,7 @@ class PostmarkApiTransport extends AbstractApiTransport
$payload['Headers'][] = [ $payload['Headers'][] = [
'Name' => $name, 'Name' => $name,
'Value' => $header->toString(), 'Value' => $header->getBodyAsString(),
]; ];
} }

View File

@ -13,6 +13,7 @@ namespace Symfony\Component\Mailer\Bridge\Sendgrid\Tests\Transport;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridApiTransport; use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridApiTransport;
use Symfony\Component\Mailer\Envelope;
use Symfony\Component\Mime\Address; use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email; use Symfony\Component\Mime\Email;
use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\HttpClient\HttpClientInterface;
@ -149,4 +150,20 @@ class SendgridApiTransportTest extends TestCase
$mailer->send($email); $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']);
}
} }

View File

@ -104,7 +104,7 @@ class SendgridApiTransport extends AbstractApiTransport
continue; continue;
} }
$payload['headers'][$name] = $header->toString(); $payload['headers'][$name] = $header->getBodyAsString();
} }
return $payload; return $payload;