Odesilani emailu pres Mandrill
- fabian
- Člen | 20
Ahoj,
zjistoval jsem, jak odesilat emaily lepe, aby nepadali do spamu. Nejdriv jsem chtel resit vlastni SMTP server, ale pak jsem narazil na hromadu sluzeb, ktere uz to maji vyresene s peknym API a statistikami doruceni apod. Sepsal jsem je zde
Vybral jsem si Mandrill,
ktery delaji kluci z Mailchimpu, se kterym mam dobre zkusenosti a jejich
pricing je privetivy.
Existuje PHP knihovna, kterou jde v pohode pouzivat a obsahuje
moznost zavolat vsechny funkce z Mandril API. Co mi ale vadilo, ze nema
Namespace a ze se vetsina parametru predava ve velkem poli. Clovek si tak musi
pamatovat, jak ho formulovat.
Proto jsem se rozhodl udelat si vlastni knihovnu, ktera by fungovala stejne,
jako \Nette\Mail\Message. Muzete pak udelat:
$m = new \Fabian\Mandrill\Message($this->context->mandrill);
$m->addTo('joe@example.com', 'John Doe')
->setSubject('First email')
->setBody("Hi,\n\nthis is first email using Mandrill.")
->setFrom('noreplay@yourdomain.com', 'Your Name')
->send();
a email se odesle misto primou cestou pres PHP fci mail() pres Mandrill API. Staci tedy vlastne vymenit jen volani new \Nette\Mail\Message za new \Fabian\Mandrill\Message($this->context->mandrill) a pred tim si nastavit odpovidajici service v configu (navod zde).
Pokud to nekoho zaujalo, muze si do projektu pridat pres composer, a kdyby vam chybelo nejake volani funkce z Mandrill API, budu rad za Pull Request na Githubu;)
- fabian
- Člen | 20
echo napsal(a):
Nebylo by lepší to implementovat jako vlastní mailer
Mas pravdu, je to tak lepsi:).
Prepsal jsem to, udelal kompatibilni s \Nette\Mail\Message a
v Fabian\Mandrill\Message jsem pridal nejake fce, ktere jsou specificke pro
posilani emailu pres Mandrill (napr ->addTag(‚..‘);). Takze si kazdej
muze vybrat, co pouzije.
Lepsi?:)
- fabian
- Člen | 20
Grim napsal(a):
Narazil jsem na jednu drobnost v MandrillMailer.php, řádek 61 by mělo být:
$params[‚html‘] = (string) $message->getHtmlBody();
Muzes poslat pull request https://github.com/…ndrill-nette. Kdyztak se mrknu pozdeji.