Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9af7d94

Browse files
committed
Add transport factories (closes symfony#31385)
1 parent 9d7e9fc commit 9af7d94

File tree

15 files changed

+733
-4
lines changed

15 files changed

+733
-4
lines changed

src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,62 @@
1212
<service id="mailer" alias="mailer.mailer" />
1313
<service id="Symfony\Component\Mailer\MailerInterface" alias="mailer.mailer" />
1414

15+
<service id="mailer.transport_factory" class="Symfony\Component\Mailer\TransportFactory">
16+
<argument type="tagged_iterator" tag="mailer.transport_factory" />
17+
</service>
18+
1519
<service id="mailer.default_transport" class="Symfony\Component\Mailer\Transport\TransportInterface">
16-
<factory class="Symfony\Component\Mailer\Transport" method="fromDsn" />
20+
<factory service="mailer.transport_factory" method="fromString" />
1721
<argument /> <!-- env(MAILER_DSN) -->
18-
<argument type="service" id="event_dispatcher" />
19-
<argument type="service" id="http_client" on-invalid="ignore" />
20-
<argument type="service" id="logger" on-invalid="ignore" />
2122
</service>
2223
<service id="Symfony\Component\Mailer\Transport\TransportInterface" alias="mailer.default_transport" />
2324

2425
<service id="mailer.messenger.message_handler" class="Symfony\Component\Mailer\Messenger\MessageHandler">
2526
<argument type="service" id="mailer.default_transport" />
2627
<tag name="messenger.message_handler" />
2728
</service>
29+
30+
<!-- transports -->
31+
<service id="mailer.transport_factory.abstract" class="Symfony\Component\Mailer\Transport\AbstractTransportFactory" abstract="true">
32+
<argument type="service" id="event_dispatcher" />
33+
<argument type="service" id="http_client" on-invalid="ignore" />
34+
<argument type="service" id="logger" on-invalid="ignore" />
35+
</service>
36+
37+
<service id="mailer.transport_factory.amazon" class="Symfony\Component\Mailer\Bridge\Amazon\Factory\SesTransportFactory" parent="mailer.transport_factory.abstract">
38+
<tag name="mailer.transport_factory" />
39+
</service>
40+
41+
<service id="mailer.transport_factory.gmail" class="Symfony\Component\Mailer\Bridge\Google\Factory\GmailTransportFactory" parent="mailer.transport_factory.abstract">
42+
<tag name="mailer.transport_factory" />
43+
</service>
44+
45+
<service id="mailer.transport_factory.mailchimp" class="Symfony\Component\Mailer\Bridge\Mailchimp\Factory\MandrillTransportFactory" parent="mailer.transport_factory.abstract">
46+
<tag name="mailer.transport_factory" />
47+
</service>
48+
49+
<service id="mailer.transport_factory.mailgun" class="Symfony\Component\Mailer\Bridge\Mailgun\Factory\MailgunTransportFactory" parent="mailer.transport_factory.abstract">
50+
<tag name="mailer.transport_factory" />
51+
</service>
52+
53+
<service id="mailer.transport_factory.postmark" class="Symfony\Component\Mailer\Bridge\Postmark\Factory\PostmarkTransportFactory" parent="mailer.transport_factory.abstract">
54+
<tag name="mailer.transport_factory" />
55+
</service>
56+
57+
<service id="mailer.transport_factory.sendgrid" class="Symfony\Component\Mailer\Bridge\Sendgrid\Factory\SendgridTransportFactory" parent="mailer.transport_factory.abstract">
58+
<tag name="mailer.transport_factory" />
59+
</service>
60+
61+
<service id="mailer.transport_factory.null" class="Symfony\Component\Mailer\Transport\NullTransportFactory" parent="mailer.transport_factory.abstract">
62+
<tag name="mailer.transport_factory" />
63+
</service>
64+
65+
<service id="mailer.transport_factory.sendmail" class="Symfony\Component\Mailer\Transport\SendmailTransportFactory" parent="mailer.transport_factory.abstract">
66+
<tag name="mailer.transport_factory" />
67+
</service>
68+
69+
<service id="mailer.transport_factory.smtp" class="Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory" parent="mailer.transport_factory.abstract">
70+
<tag name="mailer.transport_factory" priority="-100" />
71+
</service>
2872
</services>
2973
</container>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Bridge\Amazon\Factory;
13+
14+
use Symfony\Component\Mailer\Bridge\Amazon;
15+
use Symfony\Component\Mailer\Exception\InvalidDsnException;
16+
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
17+
use Symfony\Component\Mailer\Transport\Dsn;
18+
use Symfony\Component\Mailer\Transport\TransportInterface;
19+
20+
/**
21+
* @author Konstantin Myakshin <[email protected]>
22+
*/
23+
class SesTransportFactory extends AbstractTransportFactory
24+
{
25+
public function create(Dsn $dsn): TransportInterface
26+
{
27+
$scheme = $dsn->getScheme();
28+
$user = $dsn->getUser();
29+
$pass = $dsn->getPass();
30+
$region = $dsn->getOption('region');
31+
32+
if ('smtp' === $scheme) {
33+
return new Amazon\Smtp\SesTransport($user, $pass, $region, $this->dispatcher, $this->logger);
34+
}
35+
36+
if ('api' === $scheme) {
37+
return new Amazon\Http\Api\SesTransport($user, $pass, $region, $this->client, $this->dispatcher, $this->logger);
38+
}
39+
40+
if ('http' === $scheme) {
41+
return new Amazon\Http\SesTransport($user, $pass, $region, $this->client, $this->dispatcher, $this->logger);
42+
}
43+
44+
throw InvalidDsnException::unsupportedScheme($dsn);
45+
}
46+
47+
public function supports(Dsn $dsn): bool
48+
{
49+
return 'ses' === $dsn->getHost();
50+
}
51+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Bridge\Google\Factory;
13+
14+
use Symfony\Component\Mailer\Bridge\Google\Smtp\GmailTransport;
15+
use Symfony\Component\Mailer\Exception\InvalidDsnException;
16+
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
17+
use Symfony\Component\Mailer\Transport\Dsn;
18+
use Symfony\Component\Mailer\Transport\TransportInterface;
19+
20+
/**
21+
* @author Konstantin Myakshin <[email protected]>
22+
*/
23+
class GmailTransportFactory extends AbstractTransportFactory
24+
{
25+
public function create(Dsn $dsn): TransportInterface
26+
{
27+
if ('smtp' === $dsn->getScheme()) {
28+
return new GmailTransport($dsn->getUser(), $dsn->getPass(), $this->dispatcher, $this->logger);
29+
}
30+
31+
throw InvalidDsnException::unsupportedScheme($dsn);
32+
}
33+
34+
public function supports(Dsn $dsn): bool
35+
{
36+
return 'gmail' === $dsn->getHost();
37+
}
38+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Bridge\Mailchimp\Factory;
13+
14+
use Symfony\Component\Mailer\Bridge\Mailchimp;
15+
use Symfony\Component\Mailer\Exception\InvalidDsnException;
16+
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
17+
use Symfony\Component\Mailer\Transport\Dsn;
18+
use Symfony\Component\Mailer\Transport\TransportInterface;
19+
20+
/**
21+
* @author Konstantin Myakshin <[email protected]>
22+
*/
23+
class MandrillTransportFactory extends AbstractTransportFactory
24+
{
25+
public function create(Dsn $dsn): TransportInterface
26+
{
27+
$scheme = $dsn->getScheme();
28+
$user = $dsn->getUser();
29+
30+
if ('smtp' === $scheme) {
31+
return new Mailchimp\Smtp\MandrillTransport($user, $dsn->getPass(), $this->dispatcher, $this->logger);
32+
}
33+
34+
if ('api' === $scheme) {
35+
return new Mailchimp\Http\Api\MandrillTransport($user, $this->client, $this->dispatcher, $this->logger);
36+
}
37+
38+
if ('http' === $scheme) {
39+
return new Mailchimp\Http\MandrillTransport($user, $this->client, $this->dispatcher, $this->logger);
40+
}
41+
42+
throw InvalidDsnException::unsupportedScheme($dsn);
43+
}
44+
45+
public function supports(Dsn $dsn): bool
46+
{
47+
return 'mandrill' === $dsn->getHost();
48+
}
49+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Bridge\Mailgun\Factory;
13+
14+
use Symfony\Component\Mailer\Bridge\Mailgun;
15+
use Symfony\Component\Mailer\Exception\InvalidDsnException;
16+
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
17+
use Symfony\Component\Mailer\Transport\Dsn;
18+
use Symfony\Component\Mailer\Transport\TransportInterface;
19+
20+
/**
21+
* @author Konstantin Myakshin <[email protected]>
22+
*/
23+
class MailgunTransportFactory extends AbstractTransportFactory
24+
{
25+
public function create(Dsn $dsn): TransportInterface
26+
{
27+
$scheme = $dsn->getScheme();
28+
$user = $dsn->getUser();
29+
$pass = $dsn->getPass();
30+
31+
if ('smtp' === $scheme) {
32+
return new Mailgun\Smtp\MailgunTransport($user, $pass, $this->dispatcher, $this->logger);
33+
}
34+
35+
if ('http' === $scheme) {
36+
return new Mailgun\Http\MailgunTransport($user, $pass, $this->client, $this->dispatcher, $this->logger);
37+
}
38+
39+
if ('api' === $scheme) {
40+
return new Mailgun\Http\Api\MailgunTransport($user, $pass, $this->client, $this->dispatcher, $this->logger);
41+
}
42+
43+
throw InvalidDsnException::unsupportedScheme($dsn);
44+
}
45+
46+
public function supports(Dsn $dsn): bool
47+
{
48+
return 'mailgun' === $dsn->getHost();
49+
}
50+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Bridge\Postmark\Factory;
13+
14+
use Symfony\Component\Mailer\Bridge\Postmark;
15+
use Symfony\Component\Mailer\Exception\InvalidDsnException;
16+
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
17+
use Symfony\Component\Mailer\Transport\Dsn;
18+
use Symfony\Component\Mailer\Transport\TransportInterface;
19+
20+
/**
21+
* @author Konstantin Myakshin <[email protected]>
22+
*/
23+
class PostmarkTransportFactory extends AbstractTransportFactory
24+
{
25+
public function create(Dsn $dsn): TransportInterface
26+
{
27+
$scheme = $dsn->getScheme();
28+
$user = $dsn->getUser();
29+
30+
if ('smtp' === $scheme) {
31+
return new Postmark\Smtp\PostmarkTransport($user, $this->dispatcher, $this->logger);
32+
}
33+
34+
if ('api' === $scheme) {
35+
return new Postmark\Http\Api\PostmarkTransport($user, $this->client, $this->dispatcher, $this->logger);
36+
}
37+
38+
throw InvalidDsnException::unsupportedScheme($dsn);
39+
}
40+
41+
public function supports(Dsn $dsn): bool
42+
{
43+
return 'postmark' === $dsn->getHost();
44+
}
45+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Mailer\Bridge\Sendgrid\Factory;
13+
14+
use Symfony\Component\Mailer\Bridge\Sendgrid;
15+
use Symfony\Component\Mailer\Exception\InvalidDsnException;
16+
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
17+
use Symfony\Component\Mailer\Transport\Dsn;
18+
use Symfony\Component\Mailer\Transport\TransportInterface;
19+
20+
/**
21+
* @author Konstantin Myakshin <[email protected]>
22+
*/
23+
class SendgridTransportFactory extends AbstractTransportFactory
24+
{
25+
public function create(Dsn $dsn): TransportInterface
26+
{
27+
if ('smtp' === $dsn->getScheme()) {
28+
return new Sendgrid\Smtp\SendgridTransport($dsn->getUser(), $this->dispatcher, $this->logger);
29+
}
30+
31+
if ('api' === $dsn->getScheme()) {
32+
return new Sendgrid\Http\Api\SendgridTransport($dsn->getUser(), $this->client, $this->dispatcher, $this->logger);
33+
}
34+
35+
throw InvalidDsnException::unsupportedScheme($dsn);
36+
}
37+
38+
public function supports(Dsn $dsn): bool
39+
{
40+
return 'sendgrid' === $dsn->getHost();
41+
}
42+
}

0 commit comments

Comments
 (0)