Trimite e-mail-uri eficient cu Amazon SES si CakePHP

Câteva cuvinte despre Amazon SES

Amazon SES este un serviciu de e-mail dezvoltat de Amazon ce permite trimiterea profesională de e-mail-uri prin serverele Amazon. Se ocupă de trimiterea și procesarea e-mailurilor (trimiterea, validarea adreselor de e-mail, procesarea erorilor) în locul tău. Personal, folosesc SES pentru a mă asigura că am cel mai bun raport de livrabilitate pentru notificările trimise din aplicațiile mele.

Gratuit?

Nu, dar merită fiecare leu. Nu o sa te sece la buzuare, totuși. Prețurile încep de la 10 cenți per 1000 de e-mailuri trimise și sunt chiar mai mici dacă folosești soluțiile cloud de la Amazon pentru hosting.

Să ne apucăm de treabă

Prima oară, o sa ne ocupăm de implementarea din CakePHP:

Descarcă SDK-ul PHP pregătit de Amazon de aici, redenumește directorul aws-sdk și urcă-l în directorul /app/vendors/ din instalarea ta de CakePHP.

După ce ai copiat SDK-ul PHP, o să ai nevoie de o componentă simplă care extinde componenta de e-mail nativă a CakePHP, astfel încât să folosească SES. O poți descărca de pe contul meu de Github (e o versiune puțin modificată a unei componente excelente dezvoltate de Lucas Ferreira). Copiază componenta in directorul tău /app/ păstrând structura de directoare.

Presupunând că nu ai deja un cont Amazon AWS (ce include și SES), creează unul aici. Cum acesta nu este un serviciu gratuit, va trebui să introduci un număr de card înainte de a finaliza înregistrarea. Activarea tuturor serviciilor o să dureze câteva minute.

După activarea serviciilor, o sa fie nevoie să te întorci la directorul în care ai SDK-ul PHP în instalarea ta de CakePHP pentru a crea fișierul de configurare. Redenumește config-sample.inc.php în config.inc.php și adaugă-ți propriile valori pentru AWS_KEY, AWS_SECRET_KEY, AWS_ACCOUNT_ID și AWS_CANONICAL_ID. Găsești toate aceste numere în aceeași pagină, în secțiunea Security Credentials din pagina contului tău.

Testarea

Amazon SES are nevoie de access la un mediu de producție ca să poată să funcționeze fără restricții. Asta se întâmplă pentru că obiectul SES este unul puțin sensibil, iar cei de la Amazon trebuie să îi aleagă manual pe cei ce le vor folosi serviciile. Asta împiedică spammerii să folosească SES în scopuri ilegale.

Totuși, o să ai acces sandbox. Asta înseamnă că vei putea folosi toate funcționalitățile serviciului, dar numai pe adrese pe care le-ai definit (verificat) anterior. O să fie nevoie să verifici atât adresele de pe care trimiți e-mailuri (această măsură se va aplica și în mediul de producție), cât și adresele care vor primi e-mailuri. Odată ce vei avea acces la mediul de producție, nu va mai fi nevoie să verifici adresele către care trimiți mesaje. Procesul de verificare constă în trimiterea unei cereri pentru adresa dorită și apoi accesarea unui link dintr-un mesaj trimis pe acea adresă.

Poți verifica o adresă de e-mail prin apelarea unei metode din componenta EmailService pe care ai descărcat-o mai devrene de pe github:

class PagesController extends AppController {
 
	var $name = 'Pages';
	var $components = array('EmailService');
 
	function beforeFilter() {
 
	}
 
	function display() {
		$verify = $this->EmailService->verifyEmailAddress('me@example.com');
		var_dump($verify);
	}
 
}

Relativ la componenta originală de trimis e-mail-uri a CakePHP, metoda de utilizare este aproximativ aceeași. Ca adiție, o să fie nevoie să specifici componentei de Email ce fel de e-mail-uri vrei să trimiți. Restul este la fel, cu mențiunea că va trebui să folosești $this->EmailService în loc de of $this->Email. Un exemplu:

class PagesController extends AppController {
 
	var $name = 'Pages';
	var $components = array('EmailService');
 
	function display() {
		$this->EmailService->delivery = 'aws_ses'; //sau aws_ses_raw
		$this->EmailService->to = array('me@example.com');
		$this->EmailService->subject = 'Example e-mail';
		$this->EmailService->from = 'Me <meagain@example.com>';
		$this->EmailService->template = 'template';
		$this->EmailService->sendAs = 'html';
		$this->EmailService->send();
	}
 
}

Livrare prin aws_ses sau aws_ses_raw?

Asta depinde de cum este construit corpul e-mail-ului. După o serie de teste, am ajuns la concluzia că aws_ses este potrivit pentru mesajele plain text și pentru mesajele cu markup HTML simplu (fără imagini), iar aws_ses_raw este mai potrivit pentru mesaje cu markup HTML complex (text și imagini) și e-mail-uri ce conțin atașamente.

…în sfârșit. Aplicarea pentru acces la mediul de producție

Accesează acest formular simplu și completează-l cu detaliile tale. Vei primi acces la mediul de producție imediat cum îți vor analiza cererea.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">