/laravel-mandrill-driver

Open source Mandrill notification channel for Laravel, currently being used in production application to send 800,000+ monthly emails

Primary LanguagePHP

Installation

composer require salamwaddah/laravel-mandrill-driver

Configure

Add into your .env file

MANDRILL_SECRET=YOUR_MANDRILL_API_KEY

In your mail.php file

'from' => [
    'address' => 'noreply@example.com',
    'name' => "From Name"
],

'mandrill' => [
    'key' => env('MANDRILL_SECRET', 'SUPER SECRET KEY')
]

Usage

Basic usage

public function via($notifiable)
{
    return [MandrillChannel::class];
}

public function toMandrill($notifiable)
{
    return (new MandrillMessage())
        ->subject('Purchase successful')
        ->addTo($notifiable->email)
        ->view('mandrill-template-name', [
            'product' => $this->product->toArray(),
            'user' => [
                'name' => $notifiable->name,
                'phone' => $notifiable->phone
            ]
        ]);
}

Advanced

public function toMandrill($notifiable)
{
    return (new MandrillMessage())
        ->subject('Purchase successful')
        ->templateName('mandrill-template-name')
        ->addTo($notifiable->email)
        ->addTos(['a@example.com', 'b@example.com'])
        ->fromName('Customized From')
        ->fromEmail('custom_from@example.com')
        ->content([
            'product' => $this->product->toArray(),
        ]);
}

Available methods

Method Type Description
subject string Sets the email subject
templateName string Sets template name in Mandrill
addTo string Adds a To email
addTos array Adds multiple To emails
fromName string Overrides the default from name
fromEmail string Overrides the default from email
content array Content array
view function Accepts 2 params ($templateName, $keyedContentArray)

Usage in Mandrill (Dynamic Handlebars)

When specifying your content in the methods content or view you can then write in handlebars syntax in your Mandrill templates like this;

Hey {{user.name}}, you have successfully purchased {{product.name}}.

Mailchimp syntax

If you wish to use Mailchimp Merge Tags instead of the dynamic handlebars then you can set the $mergeLanguage optional param in templateName method to mailchimp.

In mailchimp merge tags, arrays are not supported, so each tag only accepts a string. Full documentation including booked keywords on mandrill

Mailchimp Example

public function toMandrill($notifiable)
{
    return (new MandrillMessage())
        ->subject('Purchase successful')
        ->templateName('mandrill-template-name', 'mailchimp') << HERE
        ->addTo($notifiable->email)
        ->content([
            'customer_name' => $notifiable->name,
            'invoice_link' => 'http://example.com/download/invoice.pdf',
        ])
}

Then in your mandrill template use as follows;

Hi *|customer_name|*, you can download your invoice from here *|invoice_link|*,