Using Apostle.io to send formatted, trackable emails from Yii applications

NOTE: Apostle.io was shut down on 30th of April 2019. They recommend SendGrid as a replacement service as it offer a templating system that uses moustache just like Apostle.io and should provide the simplest transition path from Apostle platform.

Apostle provides a nifty facility for sending app-generated, transactional emails from your application including Wordpress-like mail formatting and full tracking (delivery, opening, clicking etc.) of all emails sent. No need to set up email facilities on your app server!

Once you've figured your way round the dependencies, it's lovely and straightforward to integrate into a Yii application.

Start by installing using Composer, not using Composer leads to dependency hell since Apostle uses Guzzle which uses bits of Symfony..... The composer.json entry is on Apostle's Github page at https://github.com/apostle/apostle-php. Place this in your application/protected directory and run Composer.

You then end up with a vendor directory (if you didn't have one already) containing apostle/apostle-php/src, guzzle/guzzle/src and symfony/event-dispatcher/Symfony. In your protected/config/main.php include aliases for each of their namespaces:

Yii::setPathOfAlias('Apostle', dirname(__FILE__).'/../vendor/apostle/apostle-php/src/Apostle');
    Yii::setPathOfAlias('Guzzle', dirname(__FILE__).'/../vendor/guzzle/guzzle/src/Guzzle');
    Yii::setPathOfAlias('Symfony', dirname(__FILE__).'/../vendor/symfony/event-dispatcher/Symfony');

also include an import line for the main Apostle module:

// autoloading model and component classes
    'import' => array(
        .......
        // Autoload apostle components
        'application.vendor.apostle.apostle-php.src.*',
        .........
    ),

Then, in whatever controller you're sending the email from, call the Apostle Module and set the domain key (only do this once), which you will get when you sign up to Apostle (it's free for up to 5,000 emails a month!).

.........
    Apostle::setup("1234567890abcdef1234567890abcdef");

Create an Apostle mail instance using a template that you have already set up using the Apostle site:

........
    $mail = new Apostle\Mail('welcome');

and add the email and any other values you want to use in your email

.........
    $mail->email = $model->email;
    // Add any values our template  needs
    $mail->firstname = $profile->firstname;

Finally, send it to Apostle....

.....
    // Send to Apostle.io
    $mail->deliver();

Simple as that! No need to log emails sent, no need to set up hard coded email templates, no need to have mailing facilities set up on your application server. So long as you have the aliases set correctly for the namespaces used by Apostle, it works a treat.

There's more documentation at apostle.io/developers and Mal, the founder of Apostle.io, provides very timely and friendly support!

2 1
2 followers
Viewed: 8 067 times
Version: 1.1
Category: How-tos
Tags: email, mail
Written by: MikeT
Last updated by: Maurizio Domba Cerin
Created on: Dec 9, 2013
Last updated: 10 months ago
Update Article

Revisions

View all history

Related Articles