Výpis blogu

Obsah článku

Migrace z Mandrill na SparkPost v Ruby on Rails aplikaci

Staráme se o aplikaci BusinessBooster, ve které si každý ze zákazníků spravuje své kontakty a může jim posílat různé e-maily od reklamních sdělení, kampaní až po automatické gratulace k narozenínám.

Měsíčně se rozesílá desetitíce e-mailů a na vše se používal Mandrill, díky němuž jsme měli kompletní statistiky doručitelnosti, spamu, otevření e-mailu, prokliků, spod.

Krátce po získání tohoto projektu do naší správy, v době, kdy jsme se s celým projektem vyvíjeným několik let předchozími vývojáři teprve seznamovali, přišla zpráva, že Mandrill končí. Díky nekontrolování e-mailu, na který byl Mandrill zaregistrován, jsme se vše dozvěděli na poslední chvíli a měli jsme cca 3 týdny na nalezení a implementaci možného řešení.

Díky limitaci času, neznalosti detailní implementace rozesílání e-mailů v aplikaci BusinessBooster a dosud nikdy neimplementovanému rozesílání přes další alternativní servery, jsme se museli rozhodovat celkem rychle.

Mandrill uváděl jako možnou alternativu pro přechod server SparkPost. Při bližším prozkoumání jsme zjistili, že tento server využívá pro rozesílání e-mailů spousta velkým firem. Už jen to nám dávalo naději, že volba přejít na SparkPost bude ideální. Volba tedy padla na SparkPost.

Jelikož SparkPost přistupuje k rozesílání e-mailů s větší bezpečností a snaží se o co nejlepší doručitelnost, musely se nastudovat nové funkce jako Odesílací doména — Sending domain, SPF a DKIM záznamy, webhooks apod.

Odesílací doména — Sending domains

Odesílací domény ve SparkPostu fungují tak, že pro možnost odesílání e-mailu z vlastní domény musíte prokázat vlastnictví této domény. Např. pro e-mail my_name@my_domain.com je to my_domain.com.

Prokázání vlastnictví domény se dělá tak, že si na serveru SparkPostu zaregistrujete doménu, např.my_domain.com. SparkPost Vám následně na e-maily postmaster@my_domain.com a abuse@my_domain.com zašle e-mail, pomocí kterého správce domény potvrdí její vlastnictví.

DKIM a SPF záznamy

Pro možnost zvýšení doručitelnosti e-mailů je doporučováno na doméně např. my_domain.com nastavit DNS záznamy, které Vám SparkPost vygeneruje. Díky těmto záznamům je pak odesílaný e-mail jinak posuzován přijímacími servery a ve většině případů na něj není aplikován filtr pro spam.

DKIM záznam (Domain Keys Identified Mail) předchází zneužití vaší domény k rozesílání spamu a zneužívání citlivých údajů (phishing).

SPF záznam (Sender Policy Framework) udržuje seznam všech vlastníků dané domény, kteří mají práva zveřejňovat seznam IP adres autorizovaných pro možnost odesílání e-mailů za jejich doménu. Cílem je omezit množství spamu a lepší identifikace e-mailu pro rozpoznání spamu a identifikaci odesílatele.

WebHooks

Pro možnost získání informací o tom, co se s e-mailem po odeslání stalo, je nutné nastavit WebHooks. WebHooks se nastaví tak, že zadáte url adresu, na kterou SparkPost bude posílat aktuální stavy daného e-mailu — např. doručen, otevřen, kliknuto na odkaz v e-mailu, nedoručen z důvodu neexistence příjemce, opoždění, vyhodnocení serverem jako spam, vyhodnocení adresátem jako spam, odhlášení z odběru apod.

Na tyto události je třeba nastavit odpovídající zpracování a např. vrácené neexistující e-maily automaticky odhlásit z odběru e-mailů pro další rozesílání. Pokud by se na tyto adresy dále rozesílalo, klesalo by procento míry doručení a pokud by se tato hodnota dostala pod určitou hranici, mohl by nás SparkPost vyhodnotit jako spamera a omezit nám tak množství maximálního počtu odeslaných e-mailů za den.

Např. u Mandrillu se vám mohlo klidně stát, že jste byli serverem omezeni na rozesílání 40 e-mailů za hodinu a pokud máte ve frontě např. 1000 e-mailů, docházelo ke zpoždění odesílání o mnoho hodin.

Implenetace a další problémy

Jelikož jsme již měli dříve udělané rozesílání e-mailů přes Mandrill, mysleli jsme si, že přenastavíme pár drobností a vše bude fungovat. Naše aplikace je ale trochu komplikovanější a dříve byla vyvíjena čistě jako Java aplikace a následně byla přepisována do Ruby on Rails. Aktuálně je aplikace hybridem těchto řešení a cca 25 % je stále ještě v Java.

Rozesílání bylo bohužel implementováno v Java a my jsme tak museli celou tuto část přepsat do Ruby on Rails (jsme RoR vývojáři a cílem je zastaralý Java kód postupně nahradit). To nám zabralo další, již velmi omezený čas na přechod na SparkPost.

Nicméně implementace se povedla a vše bylo připraveno k rozesílání e-mailů přes SparkPost ve stanoveném termínu.

Problémy, na které jsme narazili

U Mandrillu nebylo potřeba registrovat odesílací doménu a tak mohl klient hned po ověření e-mailu odesílat své kampaně. U SparkPostu je třeba mít ověřen minimálně jeden záznam — vlastnictví domény, DKIP nebo SPF záznam. Čím více, tím lépe. To však způsobilo mnoha našim zákazníkům problémy, jelikož nevěděli, co po nich vlastně žádáme a celému problému většinou vůbec nerozuměli.

Registraci domény, jsme navíc, díky velké administrativní zátěži, byli nuceni implementovat zcela automaticky a uživateli jsou ihned zobrazeny potřebné kroky, které je třeba udělat pro úspěšné rozesílání e-mailu.

Následně jsme implementovali možnost uživateli vložit vlastní odesílací SparkPost účet, kde vidí další statistiky z jeho kampaní a má tak plný přehled nad svými e-maily.

Máte podobný problém? Ozvěte se nám!

Rascasone

Máte projekt nebo nápad?

Napište nám
CTA