PHP: Trimiterea de emailuri


Programatorii au foarte des nevoie de trimiterea de emailuri în aplicaţiile pe care le scriu. Printre utilizări mai frecvente ar fi: trimiterea de mesaje (pagina de contact); trimiterea de confirmări (la comenzi într-un magazin online); trimiterea parolei uitate sau legăturii pentru resetarea parolei (formulare de contact)… Din fericire în PHP este foarte simplu să trimiţi un email. Am spus aceasta ca să vă atrag. În fapt – unul dintre lucrurile care nu îmi plac la PHP – multe depind de serverul pe care testaţi, de modul lui de configurare. Oricum, pe majoritatea serverelor va merge să folosiţi funcţia mail(). Un foarte scurt cod ar arăta aşa:

[PHP]
$catre = „destinatar@domeniullui.ro”;
$subiect = „Ti-am scris din PHP”;
$mesaj = „Un prim email trimis din PHP!”;
mail($catre,$subiect,$mesaj”);[/PHP]

E cel mai la obiect cod: cui îi scrii, cu ce subiect şi cu ce mesaj? Dacă aţi urmat linkul către funcţia mail() aţi văzut că ea suportă şi un al patrulea parametru pentru antetul emailului. De aici se pot seta unele lucruri suplimentar: de exemplu expeditorul emailului, inclusiv cu nume; encoding-ul folosit (poate fi UTF-8 sau ISO-8859-2 mai comun pentru noi românii); indica o versiune plain text şi alta HTML… Eu – cum probabil fac mulţi programatori – refolosesc tot timpul coduri din alte proiecte (ale mele sau când e cazul de pe net). De exemplu pentru trimis emailuri folosesc următoarea funcţie. (Dacă vă întrebaţi de ce lipseşte parametrul al treilea… mesajul emailului e pus după antet şi gata… de ce? de unde l-am copiat la vremea lui aşa era şi cum îmi merge nu am modificat acest aspect niciodată. Nimeni nu vă opreşte desigur să îl modelaţi după dorinţă.)

[PHP]function trimiteEmail($mesaj,$dela_nume,$dela,$catre,$subiect){
$antet = „From: „.$dela_nume.”<".$dela.">\r\n”;
$antet .= „MIME-Version: 1.0\r\n”;
$boundary = uniqid(„HTMLEMAIL”);
$antet .= „Content-Type: multipart/alternative;”.
„boundary = $boundary\r\n\r\n”;
$antet .= „This is a MIME encoded message.\r\n\r\n”;
$antet .= „–$boundary\r\n”.
„Content-Type: text/plain; charset=ISO-8859-2\r\n”.
„Content-Transfer-Encoding: base64\r\n\r\n”;
$antet .= chunk_split(base64_encode(strip_tags($mesaj)));
$antet .= „–$boundary\r\n”.
„Content-Type: text/html; charset=ISO-8859-2\r\n”.
„Content-Transfer-Encoding: base64\r\n\r\n”;
$antet .= chunk_split(base64_encode($mesaj));
return mail($catre,$subiect,””,$antet);
}[/PHP]

Funcţia mail() returnează adevărat dacă expediţia a avut loc cu succes şi fals în caz de eşec. Câteva observaţii: practic reuşita trimiterii înseamnă doar că emailul a fost pus în coada de expediţii de emailuri a serverului folosit. Nu aveţi vreo garanţie că emailul a mers (desigur, în 99% din cazuri merge). Dacă dă eroare se poate să fiţi pe un server foarte restrictiv. De regulă serverele ce oferă cazare gratuită blochează sau limitează trimiterea de emailuri ca metodă de luptă contra spam-ului. Dacă aveţi un cont plătit cel mai normal este să aveţi voie şi să trimiteţi emailuri prin mail().

În fine, să mai spunem că ori de câte ori vă este suficient e bine să trimiteţi emailuri strict text (ex: notificări interne). Dacă aveţi un newsletter cu pretenţii (de design) atunci veţi avea desigur nevoie de HTML pentru înfrumuseţare. La trimiterea de emailuri HTML apar unele probleme legate de imagini. De fapt nu probleme ci opţiuni. Dar despre ele vom vorbi într-un alt articol.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (1 evaluări, media: 4,00 din 5)
Loading...Loading...

2 comentarii

  1. Eu folosesc Swift (SwiftMailer.org) sau PhpMailer (PhpMailer.codeworxtech.com). Cand vrei sa trimiti atasament, cand vrei ca sa trimiti o versiune html ori o versiune text a mailul in functie de clientul de mail care citeste mailul, si nu in ultimul rand sa ti-l puna ca SPAM din cauza encoding-ului.

    Functia de mail folosita simplu e… „so yestarday”.

  2. radu.capan spune:

    Despre PhpMailer intentionez sa scriu in curand. Nu am inteles partea cu „nu in ultimul rand sa ti-l puna ca SPAM din cauza encoding-ului”.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *