Rate this page:


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
host: smtp.sendgrid.net
port: 587
encryption: ~
username: sendgridusername
api_key: sendgrid_api_key

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

$message = Swift_Message::newInstance()


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('app_sendgrid_username') or !sfconfig::has('app_sendgrid_api_key')) {
            throw new sfException('SMTP username/api_key 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 &amp;&amp; $html === null) {
            throw new sfException('A text and/or HTML partial must be given');

        try {
             * Load connection for mailer
            $connection = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 465, 'ssl')->setUsername(sfconfig::get('app_sendgrid_username'))->setPassword(sfconfig::get('app_sendgrid_api_key'));

            // setup connection/content
            $mailer  = Swift_Mailer::newInstance($connection);
            $message = Swift_Message::newInstance()->setSubject($subject)->setTo($mailTo);

            if ($text &amp;&amp; $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: sendgridusername
password: sendgrid_api_key

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 http://domain.com to finish your registration.

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

Dear <!--?php echo $name ?-->,
Thank you for registering. Please go to <a href="http://domain.com">here</a> to finish your registration.

And send the message as follow:

myEmail::sendEmail(array('text'=>'mail/registrationTEXT', 'html'=>'mail/registrationHTML'), array('name'=>'Recipient Name'), 'youremail@domain.com', 'recipient@example.com', 'Registration Information');
Rate this page:

Need some help?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the SendGrid tag on Stack Overflow.


        Thank you for your feedback!

        We are always striving to improve our documentation quality, and your feedback is valuable to us. Please select the reason(s) for your feedback or provide additional information about how we can improve:

        Sending your feedback...
        🎉 Thank you for your feedback!
        Something went wrong. Please try again.

        Thanks for your feedback!

        Refer us and get $10 in 3 simple steps!

        Step 1

        Get link

        Get a free personal referral link here

        Step 2

        Give $10

        Your user signs up and upgrade using link

        Step 3

        Get $10

        1,250 free SMSes
        OR 1,000 free voice mins
        OR 12,000 chats
        OR more