Skip to content
This repository was archived by the owner on Feb 6, 2022. It is now read-only.

Allow to setup transports via URL #118

Merged
merged 1 commit into from
Jan 14, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ private function getMailersNode()
->useAttributeAsKey('name')
->prototype('array')
->children()
->scalarNode('url')->defaultNull()->end()
->scalarNode('transport')->defaultValue('smtp')->end()
->scalarNode('username')->defaultNull()->end()
->scalarNode('password')->defaultNull()->end()
Expand Down
31 changes: 31 additions & 0 deletions DependencyInjection/SwiftmailerExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,37 @@ protected function configureMailer($name, array $mailer, ContainerBuilder $conta
$transport = $mailer['transport'];
}

if (null !== $mailer['url']) {
$parts = parse_url($mailer['url']);
if (!empty($parts['scheme'])) {
$transport = $parts['scheme'];
}

if (!empty($parts['user'])) {
$mailer['username'] = $parts['user'];
}
if (!empty($parts['pass'])) {
$mailer['password']= $parts['pass'];
}
if (!empty($parts['host'])) {
$mailer['host'] = $parts['host'];
}
if (!empty($parts['port'])) {
$mailer['port'] = $parts['port'];
}
if (!empty($parts['query'])) {
$query = array();
parse_str($parts['query'], $query);
if (!empty($query['encryption'])) {
$mailer['encryption'] = $query['encryption'];
}
if (!empty($query['auth_mode'])) {
$mailer['auth_mode'] = $query['auth_mode'];
}
}
}
unset($mailer['url']);

$container->setParameter(sprintf('swiftmailer.mailer.%s.transport.name', $name), $transport);

if (isset($mailer['disable_delivery']) && $mailer['disable_delivery']) {
Expand Down
1 change: 1 addition & 0 deletions Resources/config/schema/swiftmailer-1.0.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<xsd:attribute name="delivery-address" type="xsd:string" />
<xsd:attribute name="disable-delivery" type="xsd:boolean" />
<xsd:attribute name="sender-address" type="xsd:boolean" />
<xsd:attribute name="url" type="xsd:string" />
</xsd:attributeGroup>

<xsd:complexType name="mailer">
Expand Down
9 changes: 9 additions & 0 deletions Tests/DependencyInjection/Fixtures/config/php/urls.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php
$container->loadFromExtension('swiftmailer', array(
'default_mailer' => 'smtp_mailer',
'mailers' => array(
'smtp_mailer' => array(
'url' => 'smtp://username:[email protected]:12345?encryption=tls&auth_mode=login',
),
),
));
13 changes: 13 additions & 0 deletions Tests/DependencyInjection/Fixtures/config/xml/urls.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:swiftmailer="http://symfony.com/schema/dic/swiftmailer"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd
http://symfony.com/schema/dic/swiftmailer http://symfony.com/schema/dic/swiftmailer/swiftmailer-1.0.xsd">

<swiftmailer:config default-mailer="smtp_mailer">
<swiftmailer:mailer name="smtp_mailer"
url="smtp://username:[email protected]:12345?encryption=tls&amp;auth_mode=login">
</swiftmailer:mailer>
</swiftmailer:config>
</container>
5 changes: 5 additions & 0 deletions Tests/DependencyInjection/Fixtures/config/yml/urls.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
swiftmailer:
default_mailer: smtp_mailer
mailers:
smtp_mailer:
url: smtp://username:[email protected]:12345?encryption=tls&auth_mode=login
15 changes: 15 additions & 0 deletions Tests/DependencyInjection/SwiftmailerExtensionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,21 @@ public function testManyMailers($type)
$this->assertEquals('1000', $container->getParameter('swiftmailer.mailer.third_mailer.transport.smtp.timeout'));
$this->assertEquals('127.0.0.1', $container->getParameter('swiftmailer.mailer.third_mailer.transport.smtp.source_ip'));
}
/**
* @dataProvider getConfigTypes
*/
public function testUrls($type)
{
$container = $this->loadContainerFromFile('urls', $type);


$this->assertEquals('example.com', $container->getParameter('swiftmailer.mailer.smtp_mailer.transport.smtp.host'));
$this->assertEquals('12345', $container->getParameter('swiftmailer.mailer.smtp_mailer.transport.smtp.port'));
$this->assertEquals('tls', $container->getParameter('swiftmailer.mailer.smtp_mailer.transport.smtp.encryption'));
$this->assertEquals('username', $container->getParameter('swiftmailer.mailer.smtp_mailer.transport.smtp.username'));
$this->assertEquals('password', $container->getParameter('swiftmailer.mailer.smtp_mailer.transport.smtp.password'));
$this->assertEquals('login', $container->getParameter('swiftmailer.mailer.smtp_mailer.transport.smtp.auth_mode'));
}

/**
* @dataProvider getConfigTypes
Expand Down