A Symfony2 bundle for parsing the contents of a url that specifies which mailer to use.
Using Composer add the bundle to your dependencies using the require
command: composer require bravesheep/mailer-url-bundle:dev-master.
Add the bundle in your app/AppKernel.php. Note: in order for the
parameters defined by this bundle to be picked up by Swiftmailer, you need to
include this bundle before including the
Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle bundle.
public function registerBundles()
{
return array(
// ...
new Bravesheep\MailerUrlBundle\BravesheepMailerUrlBundle(),
// ...
);
}For this bundle to work you need to specify which urls need to be rewritten to
basic parameters. This bundle can handle any number of urls by configuring the
correct properties under bravesheep_mailer_url.urls. Take a look at this
example configuration:
bravesheep_mailer_url:
urls:
default:
url: %mailer_url%
prefix: mailer_In this case we take the value of the mailer_url parameter and create
parameters from it prefixed with mailer_.
Take a look at this parameters.yml.dist which is distributed by the Symfony2
Standard Edition:
parameters:
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: ~
database_name: symfony
database_user: root
database_password: ~
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: ~
mailer_password: ~
locale: en
secret: ThisTokenIsNotSoSecretChangeIt
debug_toolbar: true
debug_redirects: false
use_assetic_controller: trueAs you can see we need 4 parameters to specify the smtp settings, and that doesn't even include setting the port, encryption or authentication methods in the case of SMTP (which might actually vary on different environments). It would be nice if we could reduce the number of parameters required and specify which mailer to use by specifying a single URL:
parameters:
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: ~
database_name: symfony
database_user: root
database_password: ~
mailer_url: smtp://127.0.0.1
locale: en
secret: ThisTokenIsNotSoSecretChangeIt
debug_toolbar: true
debug_redirects: false
use_assetic_controller: trueStill easily readable, but a lot more concise. The BravesheepMailerUrlBundle can
do exactly this. Given the configuration as shown in the previous section and
this configuration the bundle uses mailer_url to create the
mailer_transport and mailer_host with the correct data.
In general this bundle takes any valid mailer url and creates the following
parameters, prefixed with the specified prefix: transport, host, port,
user, password, encryption and auth_mode.
URLs are generally formatted in scheme://user:password@host:port format. The
following schemes are understood:
smtpfor basic SMTPsmtp+sslorssl+smtpfor SMTP with SSL encryptionsmtp+tlsortls+smtpfor SMTP with TLS encryptiongmailfor the GMail mail transport provided by Symfonymailfor using the internalmail()function in PHPsendmailfor using the sendmail binary your system provides
The encryption (besides using the scheme, which is preferred) and
auth_mode parameters can be specified via query parameters, for example:
smtp://user:pass@localhost/?encryption=tls&auth_mode=plain. Valid values for
auth_mode are plain, login and cram-md5.
Gmail URLs may be specified by leaving the everything after the authentication
string out, for example: gmail://[email protected]:password. For mail and
sendmail you can use: mail:// or mail, and sendmail:// or sendmail
respectively.