Pentru a expedia mesaje la o adresa de e-mail cu PHP, trebuie in primul rand ca serverul folosit sa ruleze PHP si, pentru a aplica exemplele de aici, sa aibe activata functia mail().
Procedeul este simplu, se aplica functia "mail()", dupa cum e explicat in prima parte (Lectia 31), folosind sintaxa:
mail($to, $subiect, $mesaj, $from)
Pentru ca tag-urile HTML sa fie recunoscute si afisate corespunsator, trebuie adaugate header-ele specifice in corpul datelor ce contin adresa "From:" (din variabila $from). Aceste headere trebuie sa spuna receptorului sa recunoasca datele trimise ca fiind de tip text/html, si in general puteti folosi pe urmatoarele doua, impreuna:
"MIME-Version: 1.0"
"Content-type: text/html; charset=iso-8859-1"
Ca sa intelegeti mai bine, iata un exemplu simplu, cu o functie pe care o puteti folosi in script-urile dv. Explicatiile necesare sunt in cod.
<?php // De la marplo.net /*** Functia de trimitre mail-uri ***/ function send_mail($to, $from, $from_name, $sub, $msg){ $eol = "\r\n"; // Pt. adaugare linie noua // Adauga corect adresa $from si headers $headers = "From: " . $from_name . "<" . $from . ">".$eol; $headers .= "MIME-Version: 1.0" . $eol; $headers .= "Content-type: text/html; charset=iso-8859-1" . $eol; // Executa expedierea datelor la serverul de mail // Daca au fost trimise cu succes returneaza mesaj de confirmare, in caz contrar, de eroare if (mail($to, stripslashes($sub), stripslashes($msg), $headers)) return 'Mesajul a fost trimis cu succes'; else return 'Eroare: mesajul nu a putut fi expediat'; } // Cand vreti sa trimiteti un e-mail, apelati functia, cu cei cinci parametri // Dupa cum e in continuare $to = 'destinatar@mail.com'; // Adresa de mail a destinatarului $from = 'expeditor@adresa.mail'; // Adresa de e-mail a expeditorului $nume = 'Numele_Expeditorului'; $subiect = 'Un subiect pt. e-mail'; $mesaj = '<h3>Mesajul transmis</h3><div style="color:blue;">Poate contine <b>tags HTML</b>,<br /> Si stiluri CSS adaugate in interiorul acestora, cu style="..."</div>.'; // Acum se apeleaza functia, cu aceste date pe care le va trimite la serverul de mail $go_mail = send_mail($to, $from, $nume, $subiect, $mesaj); echo $go_mail; // Afiseaza rezultatul ?>- Daca doriti sa formatati textul folosind cod CSS, acesta trebuie adaugat prin atributul style="". Nu functioneaza cu tag <style>.
Pentru a include unul sau mai multe atasamente (fisiere, arhive) intr-un e-mail trimis cu PHP, procedeul e ceva mai complicat. Pe scurt, trebuie ca datele din acel fisier sa fie preluate (citite) de PHP, codate cu MIME base64 si impartite cu functia "chunk_split()". Apoi aceste date, impreuna cu tipul fisierului atasat, se adauga in corpul mesajului, alaturi de celelalte headere.
Puteti intelege cum se face daca studiati script-ul de mai jos, de asemenea, il puteti folosi in aplicatiile dv.. Este facut ca model pentru a trimite doua atasamente, poate fi modificat usor daca doriti sa trimiteti doar unul sau mai multe, gasiti explicatii in documentatia din script.
Important este sa specificati calea corecta catre fisierul atasat, astfel incat acesta sa poata fi deschis cu functia "fopen()", in cazul acestui model, cele doua fisiere se afla in acelasi director cu scriptul. Pentru fisiere de tip arhiva .rar si .zip nu e nevoie sa modificati tipul.
Vedeti detaliile din cod despre cum se adauga fisierele pt. atasament.
<?php // Script PHP - Trimitere e-mail cu attasamente si tag-uri HTML // De la marplo.net ( adaptat de la: http://www.codewalkers.com/c/b/Email-Code/ ) $attach = array(); // Defineste variabila ce va contine datele pt. atasamente // Functia care trebuie apelata pt. a include mesajul si atasamentele in e-mail function mail_att($to, $from, $sub, $msg, $attach) { // In continuare se definesc header-ele pt. e-mail $headers = "From: ".$from; $rand_hash = md5(time()); $mime_boundary = "==Multipart_Boundary_x".$rand_hash."x"; $headers .= "\nMIME-Version: 1.0\n". "Content-Type: multipart/mixed;\n". ' boundary="'.$mime_boundary.'"'; $msg .= "Un multi-part mesaj in MIME format.\n\n". '--'.$mime_boundary."\n". "Content-Type:text/html; charset=\"iso-8859-1\"\n". "Content-Transfer-Encoding: 7bit\n\n".$msg."\n\n"; // Aici se seteaza includerea atasamentelor (daca exista fisiere adaugate) if (count($attach)>=1) { // Parcurge matricea cu datele fisierelor for($i=0; $i<count($attach); $i++) { // Deschide fisierul si preia datele din el if ($file = fopen($attach[$i][0],'rb')) { $data = fread($file, filesize($attach[$i][0])); fclose($file); } // Codeaza date preluate cu MIME base64 si le separa in parti mai mici $data = chunk_split(base64_encode($data)); // Adauga datele fisierului in mesajul mail-ului $msg .= '--'.$mime_boundary."\n". 'Content-Type: '.$attach[$i][2].";\n". ' name="'.$attach[$i][1]."\"\n". "Content-Transfer-Encoding: base64\n\n".$data ."\n\n". '--'.$mime_boundary."\n"; } } // Se apeleaza functia pt. trimiterea datelor la serverul de mail if (mail($to, $sub, $msg, $headers)) return "E-mail-ul a fost trimis"; else return 'Eroare: mesajul nu a putut fi expediat'; } // Aici se seteaza datele principale (sau pot fi preluate din formulare) $to = 'destinatar@mail.com'; // Adresa de mail a destinatarului $from = 'expeditor@adresa.mail'; // Adresa de e-mail a expeditorului $subiect = 'Un subiect pt. e-mail'; $mesaj = '<h3>Mesajul transmis</h3><div style="color:blue;">Poate contine <b>tags HTML</b>,<br /> Si stiluri CSS adaugate in interiorul acestora, cu style="..."</div> Precum si atasamente.'; // Se adauga datele pt. fisierele ce vor fi atasate $attach[] = array('fisier.rar', 'Fisier1', 'application/octet-stream'); $attach[] = array('arhiva2.zip', 'Arhiva2', 'application/octet-stream'); // Daca doriti sa trimiteti doar un atasament, stergeti codul ce adauga pe al doilea /* Daca doriti sa adaugati mai multe atasamente, repetati formula, sub celelalte: $attach[] = array('cale/fisier', 'Nume_fisier', 'tip_fisier'); - 'cale/fisier' e calea si numele fisierului pe server, ce trebuie atasat - 'Nume_fisier' e numele cu care va apare atassamentul in mail - 'tip_fisier' e tipul fisierului atasat, pt. arhive RAR, ZIP lasati 'application/octet-stream' */ // Acum e apelata functia ce prelucreaza datele si le trimite la serverul de mail $go_mail = mail_att($to, $from, $subiect, $mesaj, $attach); echo $go_mail; ?>- Cu functia din acest script pot fi trimise si e-mail-uri fara atasament, doar cu continut text si cod HTML in mesaj, pt. asta trebuie sterse variabilele de tip "$attach[]".
<p>Adresa: <strong>http://CoursesWeb.net/</strong> - Tutoriale.</p>
#id { font-weight: 800; }
function someFunction() { alert("CoursesWeb.net"); } setInterval("someFunction()", 2000);
$vname = 8; echo $vname;
We have traveled in space. - Noi am calatorit (deja) in spatiu.
La niña pintaba un arco iris. - Fetita picta un curcubeu.