Mengirim dan Tracking email newsletter dengan laravel dan mailgun

Salah satu project terbaru saya adalah membuat sebuah newsletter engine, yang secara garis besar tujuannya adalah memberikan kemudahan untuk para sales / internet marketing untuk mengirim email newsletter kepada para konsumen (ataupun target konsumennya). Konten dari newsletter sendiri akan diambil secara otomatis dari berbagai sosial media.

Salah satu fitur utamanya adalah tentu saja, mengirim email newsletter, dan kemudian melakukan tracking untuk mengetahui berapa email yang terkirim, berapa email yang dibuka atau berapa email yang melakukan klik pada link yang ingin di promoin, ataupun klik link unsubscribe dan juga ‘mark as spam’. Saya menggunakan mailgun untuk email engine nya karena secara out of the box, sudah menyediakan fitur tersebut, dan juga lebih efisien di banding membangun email engine sendiri yang bakal lebih banyak makan waktu dan kemungkinan bakal di tandai sebagai spam oleh provider layanan email adalah sangat besar. Selain itu, mailgun juga sangat di support oleh laravel, PHP Framework yang saya gunakan untuk membangun projek ini. Laravel menyediakan driver untuk mailgun sehingga hanya dengan sedikit konfigurasi, mailgun akan terintegrasi dengan baik pada laravel.

Screen Shot 2016-04-11 at 12.52.09 PM

Tentang Mailgun

Mailgun adalah penyedia layanan email as services dimana intinya sih kamu bisa mengirim email menggunakan server mereka. Dengan adanya mailgun, developer gak perlu bikin email server sendiri, atau kuatir email yang dikirim akan masuk ke spam, atau juga menjaga server agar tetap ‘sehat’ sehingga para email provider (gmail, yahoo, etc) tidak menganggap server kamu sebagai server yang mencurigakan dan memasukkan semua email dari server mu ke folder spam. Ada banyak fitur lain dari mailgun yang bisa di lihat di website mereka

Mailgun dan Laravel

Seperti yang sudah saya singgung diatas, laravel menyediakan driver untuk menggunakan mailgun sebagai email engine. Sebenarnya sih mailgun sendiri punya PHP SDK sendiri yang bakal bantuin kamu berinteraksi dengan API nya secara mudah, tapi kalau projek mu menggunakan laravel, maka akan lebih bijak kalau menggunakan “laravel way” nya, karena… ya emang itu kan salah satu fungsi menggunakan framework? 😃 Supaya kamu dan rekan-rekan mu sesama developer punya bahasa yang sama untuk melakukan beberapa macam kegiatan yang sudah di sediakan oleh framework.

Untuk setting mailgun di laravel, kamu bisa di dokumentasi laravel, thanks to dotenv, karena kamu bisa setup secara mudah dengan cara edit file .env pada root folder laravel. dan masukkan parameter berikut

MAIL_DRIVER=
MAIL_HOST=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_DOMAIN= 
MAIL_SECRET=

Data untuk mengisi masing-masing parameter diatas bisa dilakukan setelah melakukan registrasi di web mailgun, kalau hanya untuk keperluan testing, kamu bisa pakai fitur free dengan batasan 10.000 email per bulan. lumayan tuh 🙂

Setelah registrasi selesai, disana ada sandbox domain yang bisa dipakai, atau mau menggunakan custom domain sendiri juga boleh, saat ini saya masih menggunakan sandbox karena memang masih tahap development. Nah, di halaman detail domain, akan terdapat informasi untuk mengisi file .env diatas tadi.

sandbox_mailgun

Mengirim Email

Untuk mengirim email, karena menggunakan fitur built-in laravel, kamu bisa tinggal ikut dokumentasi laravel mail.

Mail::send(
    'campaign/templates/newsletter',
    $data,
    function ( $message ) use ( $args ) {
        $message->from( "noreply@example.com" )
                ->subject( 'Example Newsletter' )
                ->to( $args[ 'sendto' ] );
    }
);

Anyway, Sampai sekarang saya masih takjub dengan betapa laravel membuat mengirim email menjadi lebih mudah dan eksplisit seperti ini (sebelumnya saya menggunakan codeigniter dan juga raw PHP, ribet dan gak elegan)

Memberi Tagging

Mailgun memang memberikan fitur data analitik untuk email yang terkirim, tapi data analitik ini secara global, bukan untuk masing-masing email yang terkirim. Namun mailgun menyediakan juga fitur tagging, atau bahasa gampangnya penanda email setiap melakukan pengiriman email. Sebagai contoh untuk kasus saya, sebelum mengirim email, setiap email yang akan dikirim akan disimpan di database dan memiliki field ID masing-masing. Lalu saya gunakan ID ini untuk menjadi tagging pada email yang dikirim, sehingga setiap email akan memiliki ID / Tagging yang unik.

Sebelumnya saya sempet ribet untuk memberi tagging ini pada laravel karena fitur mail pada laravel hanya support untuk general purpose untuk beragam driver, jadi kalau mengikuti dokumentasi tagging pada mailgun dimana mailgun membutuhkan parameter “o:tag” yang tentu saja gak bisa di implementasiin di laravel.

Setelah googling dan membaca dokumentasi swiftmailer (mail engine yang digunakan laravel) akhirnya saya berhasil menambahkan tagging pada email dengan menambahkan 2 baris kode baru pada kode pengirim email diatas tadi.

Mail::send(
    'campaign/templates/newsletter',
    $data,
    function ( $message ) use ( $args ) {
        $message->from( "noreply@example.com" )
                ->subject( 'newsletter' )
                ->to( $args[ 'sendto' ] );

        // adding tagging to email
        $headers = $message->getHeaders();
        $headers->addTextHeader( 'X-Mailgun-Tag', 'campaign-' . $args[ 'ID' ] );
    }
);

Sip, setelah itu saya coba mengirim email dan hasilnya :

Screen Shot 2016-04-11 at 1.47.07 PM

berhasil! 💯

Mendapatkan Statistik Email

Untuk mendapatkan statistik email dari mailgun cara paling mudah adalah menggunakan PHP SDK dari mailgun sendiri.

Lah, tadi katanya gak pake PHP SDK nya mailgun?

Iya, untuk keperluan yang sudah disediakan oleh framework mah lebih baik menggunakan yang sudah ada, namun untuk keperluan lain yang gak disediain ya mending buat sendiri atau pake library lain yang sudah ada. Dalam hal ini mailgun cukup keren karena punya banyak SDK untuk beberapa macam bahasa pemprograman, termasuk PHP.

Nah berikut adalah potongan kode untuk pengambilan statistik email berdasarkan tagging nya dari dokumentasi mailgun.

$mail   = new Mailgun( env( 'MAILGUN_SECRET' ) );
$domain = env( 'MAILGUN_DOMAIN' );
$tags   = "campaign-17";
$events = "opened";

try {
    $data = $mail->get(
        $domain . "/tags/" . $tags . "/stats",
        array(
            'event' => $events
        )
    );

    return $data->http_response_body;
} catch ( \Exception $e ) {
    return array();
}

Berdasarkan dokumentasi itu juga, terdapat beberapa event yang bisa di tracking.

Screen Shot 2016-04-11 at 2.04.53 PM

Dengan info selengkap ini, para user bisa mengetahui statistik dari setiap newsletter yang dikirim kepada konsumen nya yang tentunya akan berpengaruh pada strategi marketing berikutnya.

 


7 tanggapan untuk “Mengirim dan Tracking email newsletter dengan laravel dan mailgun”

  1. Sayangnya kalo pake Mailgun (atau semacamnya), gak bisa kirim ke email [at]yahoo.com dan [at]aol.com karena DMARC policy.

    Ah.. tapi sapa sih yang (masi) pake AOL dan Yahoo Mail buat primary mail ?

    Note: kemaren nyoba klo kirim ke [at]yahoo.co.id masi bisa sih…

    1. Avatar Yoga Sukma
      Yoga Sukma

      Wah, belum coba sih, kebetulan testernya kok ya pake gmail semua ini. thankyou mas, bisa jadi notes ini.

  2. Nah… kalo pake sendgrid, gak bisa kebuka di provider telkomsel 😀

    1. Avatar Yoga Sukma

      wah iya gitu? yg gak kebuka email nya apa web sendgrid nya?

  3. Bookmarked!
    Makasih mas udah share pengalaman dan tutorialnya tentang newsletter menggunakan Laravel+Mailgun.
    Belum pernah handle case tracking email seperti ini sih, tp saya rasa tulisan ini akan bermanfaat terus terutama untuk saya kedepannya hehe. Lajutkan……..

  4. Mantap artikelnya, sangat membantu…

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *