Symfony SMTP Integration Guide

Guide to integrate Mailazy with your Symfony application


You need to complete these given prerequisites, you can skip the step if you have already completed.

  1. Sign up for a Mailazy account.
  2. Complete Domain Authentication.
  3. Generate the Mailazy Access Key

Integrate Mailazy with Symfony

Symfony uses SwiftMailer to send email, read more about sending emails from Symfony. To get started you need to modify parameters.yml and add the following:

class: sfMailer
charset: %SF_CHARSET%
delivery_strategy: realtime
class: Swift_SmtpTransport
port: 587
encryption: ~
username: mailazy_apikey
api_key: mailazy_secret

After that you should be able to send emails. The following shows an example:

$message  = Swift_Message::newInstance()
->setFrom('[email protected]')
->setTo('[email protected]')

Another Option

If you want more flexibility, you can use partials to define the content of the emails. Add the a class such as lib/myEmail.class.php.

class myEmail
  * Library to facilitate email messages being sent out, sendMail deprecated in symfony 1.2
  * @param string $partial - Array with html and text partials ie array('text'=>'textPartial', 'html'=>'htmlPartial')
  * @param array $parameters - Array we will pass into the partials
  * @param string $mailFrom - Email source
  * @param string $mailTo - Email destination
  * @param string $subject - The subject of the email message
  * @param array $sgHeaders - What we will be placing in the SMTPAPI header. Must be null or a non-empty array
  * @param array $attachments - Email contains the attachments
  public  static  function sendEmail($partials, $parameters, $mailFrom, $mailTo, $subject, $sgHeaders  = null, $attachments  = null)
  // verify we have username/api_key to send out emails - IMPORTANT
  if (!sfconfig::has('mailazy_apikey') or  !sfconfig::has('mailazy_secret')) {
    throw  new sfException('SMTP mailazy_apikey/mailazy_secret is required to send email out');

  $text  = null;
  $html  = null;
  if (is_array($partials)) {
    // load libraries
    if (isset($partials['text'])) {
      $text  = get_partial($partials['text'], $parameters);
    if (isset($partials['html'])) {
      $html  = get_partial($partials['html'], $parameters);
  if ($text  === null &&  $html  === null) {
    throw  new sfException('A text and/or HTML partial must be given');
  try {
  * Load connection for mailer

    $connection  = Swift_SmtpTransport::newInstance('', 587, 'tls')->setUsername(sfconfig::get('mailazy_apikey'))->setPassword(sfconfig::get('mailazy_secret'));
    // setup connection/content
    $mailer  = Swift_Mailer::newInstance($connection);
    $message  = Swift_Message::newInstance()->setSubject($subject)->setTo($mailTo);
    if ($text  &&  $html) {
      $message->setBody($html, 'text/html');
      $message->addPart($text, 'text/plain');
    } else  if ($text) {
      $message->setBody($text, 'text/plain');
    } else {
      $message->setBody($html, 'text/html');
    // if contains SMTPAPI header add it
    if (null !==  $sgHeaders) {
      $message->getHeaders()->addTextHeader('X-SMTPAPI', json_encode($sgHeaders));

    // update the from address line to include an actual name
    if (is_array($mailFrom) and count($mailFrom) ==  2) {
      $mailFrom  =  array(
        $mailFrom['email'] =>  $mailFrom['name']

    // add attachments to email
    if ($attachments  !== null and is_array($attachments)) {
      foreach ($attachments  as  $attachment) {
        $attach  = Swift_Attachment::fromPath($attachment['file'], $attachment['mime'])->setFilename($attachment['filename']);

    // Send
  catch (Exception $e) {
    throw  new sfException('Error sending email out - ' .  $e->getMessage());

Then configure your credentials on apps/frontend/app.yml

username: mailazy_apikey
password: mailazy_secret

Now can put your partials in a module such as apps/frontend/modules/mail. For example, to send a registration email in both text and HTML, we would have the following structure:


Add this to apps/frontend/modules/mail/_registrationTEXT.php

Dear <!--?php echo  $name  ?-->,
Thank you for registering. Please go to to finish your registration.

Add this to apps/frontend/modules/mail/_registrationHTML.php

Dear <!--?php echo  $name  ?-->,

Thank you for registering. Please go to to finish your registration.

And send the message as follow:


myEmail::sendEmail(array('text'=>'mail/registrationTEXT', 'html'=>'mail/registrationHTML'), array('name'=>'Recipient Name'), '[email protected]', '[email protected]', 'Registration Information');