Search code examples
phptemplatesmandrill

Send email with template (Mandrill PHP)


I have created a template in Mandrill but I don't know how to use to send email.

Here is an example how to use it with a simple html:

<?php

include_once "swift_required.php";

$subject = 'Hello from Mandrill, PHP!';
$from = array('[email protected]' =>'Your Name');
$to = array(
 '[email protected]'  => 'Recipient1 Name',
 '[email protected]' => 'Recipient2 Name'
);

$text = "Mandrill speaks plaintext";
$html = "<em>Mandrill speaks <strong>HTML</strong></em>";

$transport = Swift_SmtpTransport::newInstance('smtp.mandrillapp.com', 587);
$transport->setUsername('MANDRILL_USERNAME');
$transport->setPassword('MANDRILL_PASSWORD');
$swift = Swift_Mailer::newInstance($transport);

$message = new Swift_Message($subject);
$message->setFrom($from);
$message->setBody($html, 'text/html');
$message->setTo($to);
$message->addPart($text, 'text/plain');

if ($recipients = $swift->send($message, $failures))
{
 echo 'Message successfully sent!';
} else {
 echo "There was an error:\n";
 print_r($failures);
}

?>

Solution

  • You can send the email and use the template by using the Mandrill PHP API wrapper.

    require 'Mandrill.php';
    
    $mandrill = new Mandrill('YOUR_API_KEY');
    
    $message = array(
        'subject' => 'My subject',
        'from_email' => '[email protected]',
        'to' => array(array('email' => '[email protected]', 'name' => 'Marc')),
        'merge_vars' => array(array(
            'rcpt' => '[email protected]',
            'vars' =>
            array(
                array(
                    'name' => 'FIRSTNAME',
                    'content' => 'Recipient 1 first name'),
                array(
                    'name' => 'LASTNAME',
                    'content' => 'Last name')
        ))));
    
    $template_name = 'YOUR-TEMPLATE-NAME';
    
    $template_content = array(
        array(
            'name' => 'main',
            'content' => 'Hi *|FIRSTNAME|* *|LASTNAME|*, thanks for signing up.'),
        array(
            'name' => 'footer',
            'content' => 'Copyright 2013.')
    
    );
    
    $response = $mandrill->messages->sendTemplate($template_name, $template_content, $message);
    print_r($response);
    

    If you want to use the SMTP via SwiFtMailer, you could call the Render API method to render a template, which will give you the full HTML, which you can pass to SwiftMailer but that seems a bit of a long winded way of doing it compared to the PHP API wrapper.