Changes
Title
unchanged
Using Apostle.io to send formatted, trackable emails from Yii applications
Category
unchanged
How-tos
Yii version
changed
1.1
Tags
changed
email, email
Content
changed
> 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](http://apostle.io) 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.[...]
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:
```php
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:
```php
// autoloading model and component classes
'import' => array(
.......[...]
'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!).
```php
.........
Apostle::setup("1234567890abcdef1234567890abcdef");
```
Create an Apostle mail instance using a template that you have already set up using the Apostle site:
```php
........
$mail = new Apostle\Mail('welcome');
```
and add the email and any other values you want to use in your email
```php
.........
$mail->email = $model->email;
// Add any values our template needs
$mail->firstname = $profile->firstname;
```
Finally, send it to Apostle....
```php
.....
// 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](http://apostle.io/developers) and Mal, the founder of Apostle.io, provides very timely and friendly support!