Skip to content

Commit 4407c59

Browse files
committed
Parameterize Mailgun's region
1 parent 2fe0aaa commit 4407c59

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

Tests/TransportTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
use Symfony\Component\Mailer\Exception\InvalidArgumentException;
2424
use Symfony\Component\Mailer\Exception\LogicException;
2525
use Symfony\Component\Mailer\Transport;
26+
use Symfony\Component\Mime\Email;
2627
use Symfony\Contracts\HttpClient\HttpClientInterface;
28+
use Symfony\Contracts\HttpClient\ResponseInterface;
2729

2830
class TransportTest extends TestCase
2931
{
@@ -106,6 +108,15 @@ public function testFromDsnMailgun()
106108
$this->assertEquals('pa$s', $transport->getPassword());
107109
$this->assertProperties($transport, $dispatcher, $logger);
108110

111+
$transport = Transport::fromDsn('smtp://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun', $dispatcher, null, $logger);
112+
$this->assertEquals('smtp.mailgun.org', $transport->getStream()->getHost());
113+
114+
$transport = Transport::fromDsn('smtp://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun?region=eu', $dispatcher, null, $logger);
115+
$this->assertEquals('smtp.eu.mailgun.org', $transport->getStream()->getHost());
116+
117+
$transport = Transport::fromDsn('smtp://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun?region=us', $dispatcher, null, $logger);
118+
$this->assertEquals('smtp.mailgun.org', $transport->getStream()->getHost());
119+
109120
$client = $this->createMock(HttpClientInterface::class);
110121
$transport = Transport::fromDsn('http://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun', $dispatcher, $client, $logger);
111122
$this->assertInstanceOf(Mailgun\Http\MailgunTransport::class, $transport);
@@ -115,6 +126,25 @@ public function testFromDsnMailgun()
115126
'client' => $client,
116127
]);
117128

129+
$response = $this->createMock(ResponseInterface::class);
130+
$response->expects($this->any())->method('getStatusCode')->willReturn(200);
131+
$message = (new Email())->from('me@me.com')->to('you@you.com')->subject('hello')->text('Hello you');
132+
133+
$client = $this->createMock(HttpClientInterface::class);
134+
$client->expects($this->once())->method('request')->with('POST', 'https://api.mailgun.net/v3/pa%24s/messages.mime')->willReturn($response);
135+
$transport = Transport::fromDsn('http://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun', $dispatcher, $client, $logger);
136+
$transport->send($message);
137+
138+
$client = $this->createMock(HttpClientInterface::class);
139+
$client->expects($this->once())->method('request')->with('POST', 'https://api.eu.mailgun.net/v3/pa%24s/messages.mime')->willReturn($response);
140+
$transport = Transport::fromDsn('http://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun?region=eu', $dispatcher, $client, $logger);
141+
$transport->send($message);
142+
143+
$client = $this->createMock(HttpClientInterface::class);
144+
$client->expects($this->once())->method('request')->with('POST', 'https://api.mailgun.net/v3/pa%24s/messages.mime')->willReturn($response);
145+
$transport = Transport::fromDsn('http://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun?region=us', $dispatcher, $client, $logger);
146+
$transport->send($message);
147+
118148
$transport = Transport::fromDsn('api://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun', $dispatcher, $client, $logger);
119149
$this->assertInstanceOf(Mailgun\Http\Api\MailgunTransport::class, $transport);
120150
$this->assertProperties($transport, $dispatcher, $logger, [
@@ -123,6 +153,21 @@ public function testFromDsnMailgun()
123153
'client' => $client,
124154
]);
125155

156+
$client = $this->createMock(HttpClientInterface::class);
157+
$client->expects($this->once())->method('request')->with('POST', 'https://api.mailgun.net/v3/pa%24s/messages')->willReturn($response);
158+
$transport = Transport::fromDsn('api://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun', $dispatcher, $client, $logger);
159+
$transport->send($message);
160+
161+
$client = $this->createMock(HttpClientInterface::class);
162+
$client->expects($this->once())->method('request')->with('POST', 'https://api.eu.mailgun.net/v3/pa%24s/messages')->willReturn($response);
163+
$transport = Transport::fromDsn('api://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun?region=eu', $dispatcher, $client, $logger);
164+
$transport->send($message);
165+
166+
$client = $this->createMock(HttpClientInterface::class);
167+
$client->expects($this->once())->method('request')->with('POST', 'https://api.mailgun.net/v3/pa%24s/messages')->willReturn($response);
168+
$transport = Transport::fromDsn('api://'.urlencode('u$er').':'.urlencode('pa$s').'@mailgun?region=us', $dispatcher, $client, $logger);
169+
$transport->send($message);
170+
126171
$this->expectException(LogicException::class);
127172
Transport::fromDsn('foo://mailgun');
128173
}

Transport.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,13 @@ private static function createTransport(string $dsn, EventDispatcherInterface $d
101101
}
102102

103103
if ('smtp' === $parsedDsn['scheme']) {
104-
return new Mailgun\Smtp\MailgunTransport($user, $pass, $dispatcher, $logger);
104+
return new Mailgun\Smtp\MailgunTransport($user, $pass, $query['region'] ?? null, $dispatcher, $logger);
105105
}
106106
if ('http' === $parsedDsn['scheme']) {
107-
return new Mailgun\Http\MailgunTransport($user, $pass, $client, $dispatcher, $logger);
107+
return new Mailgun\Http\MailgunTransport($user, $pass, $query['region'] ?? null, $client, $dispatcher, $logger);
108108
}
109109
if ('api' === $parsedDsn['scheme']) {
110-
return new Mailgun\Http\Api\MailgunTransport($user, $pass, $client, $dispatcher, $logger);
110+
return new Mailgun\Http\Api\MailgunTransport($user, $pass, $query['region'] ?? null, $client, $dispatcher, $logger);
111111
}
112112

113113
throw new LogicException(sprintf('The "%s" scheme is not supported for mailer "%s".', $parsedDsn['scheme'], $parsedDsn['host']));

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"symfony/amazon-mailer": "^4.3",
2727
"symfony/google-mailer": "^4.3",
2828
"symfony/http-client-contracts": "^1.1",
29-
"symfony/mailgun-mailer": "^4.3",
29+
"symfony/mailgun-mailer": "^4.3.2",
3030
"symfony/mailchimp-mailer": "^4.3",
3131
"symfony/postmark-mailer": "^4.3",
3232
"symfony/sendgrid-mailer": "^4.3"

0 commit comments

Comments
 (0)