Sunteți pe pagina 1din 5

Tutorial PHP: Trimiterea unui email cu PHP –

Functia PHP
Cu ajutorul PHP putem foarte usor sa trimitem un e-mail la o anumita adresa din pagina web. Acest
lucru este util de exemplu in cazul unui formular de contact. Se poate desigur sa lasam pe pagina
adresa de e-mail insa nu este indicat deoarece poate ajunge in mainile oricui intra pe pagina si mai
important poate fi citita de programe bot care trimit spam-uri. Cel mai indicat este un formular de
contact, securizat din punct de vedere abuziv si completarea corecta a datelor.

Ca sa trimiteti un e-mail de pe localhost aveti nevoie de un server de e-mail, daca insa folositi un
serviciu de webhost, acestea au deja un server de e-mail instalat (majoritatea)

Trimiterea mesajelor

SMTP (Simple Mail Transfer Protocol) reprezinta protocolul standard pentru transferul mesajelor prin
intermediul internetului la o adresa de e-mail.
Pentru a putea trimite un e-mail se foloseste functia mail() ce are sintaxa:

mail(‘catre’, ‘subiect’, ‘mesaj’)

Unde “catre” reprezinta adresa de email unde va fi trimis mesajul, “subiect” reprezinta subiectul
mesajului iar “mesaj” reprezinta mesajul trimis.
Functia mai poate sa contina si un al patrulea atribut optional “from” care specifica locatia de unde a
fost trimis mesajul. Daca acest atribut nu este specificat, serverul va trimite mesajul in functie de cum
este configurat.
Aceste atribute pot fi desigur preluate dintr-un formular cu $_POST.
Functia mail() returneaza TRUE daca mesajul a fost trimis, altfel returneaza FALSE.

Exemplu

<?php
// Verifica daca au fost trimise datele de la formular
if (isset($_POST['email']) && isset($_POST['mesaj'])) {
$to = 'adresa@yahoo.com';
$subiect = 'Mesaj de pe site';
$mesaj = $_POST['mesaj'];
$from = 'From: '. $_POST['email'];
//Trimite mesajul prin e-mail
if (mail($to, $subiect, $mesaj, $from)) {
echo 'Mesajul a fost trimis.';
}
else {
echo 'Mesajul nu a fost trimis.';
}
}
?>

In primul rand se verifica cu functia isset() daca au fost trimise din formular e-mail-ul persoanei si
mesajul, dupa care se declara fiecare variabila si se trimite mesajul prin e-mail.
Observati faptul ca variabila $from contine sirul “From: ” inainte de adresa preluata din formular.
Acest lucru este obligatoriu.

Trimiterea tagurilor html prin e-mail

Implicit, functia mail() trimite doar mesaje text simple fara taguri html. pentru a putea trimite si taguri
html prin e-mail este necesara adaugarea anumitor header-e in variabila $from. Aceste hearde-e spun
receptorului ca datele trimise contin si taguri html. pentru acest lucru se folosesc urmatoarele doua
sintaxe:

MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1

Exemplu

<?php
$to = 'adresa@mail.com';
$from = 'adresa@mail.com';
$subiect = 'Un subiect oarecare';
$mesaj = '<h3>Un mesaj</h3>
<div style="color:#10f0ff;border-style:solid;border-width:1px;width:10em;">
Un mesaj oarecareeee</div>';
$ln = "rn"; // Pentru adaugare linie noua
$headers = "From: ".$from.$ln;
$headers .= "MIME-Version: 1.0".$ln;
$headers .= "Content-type: text/html; charset=iso-8859-1".$ln;
if (mail($to, $subiect, $mesaj, $headers)) {
echo 'Mesaj trimis';
}
else {
echo 'Mesaj netrimis';
}
?>

Trimiterea atasamentelor prin e-mail

Trimiterea fisierelor prin e-mail este o munca mai greoaie. Pentru a intelege mai bine studiati
urmatorul exemplu.

<?php
$attach = array(); // variabila ce va contine datele pt atasamente
$to = 'nicu_bogd@yahoo.com';
$from = 'nicu_bogd@yahoo.com';
$subiect = 'Un subiect oarecare';
$mesaj = '<h3"Un mesaj</h3"
<div style="color:#10f0ff;border-style:solid;border-width:1px;width:10em;">
Un mesaj oarecareeee</div"';
// se adauga datele pt fisierele ce vor fi atasate
$attach[] = array('imagine.jpg', 'fisier1', 'image/jpeg');
// 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.0n".
"Content-Type: multipart/mixed;n".
' boundary="'.$mime_boundary.'"';
$msg .= "Un multi-part mesaj in MIME format.nn".
'--'.$mime_boundary."n".
"Content-Type:text/html; charset="iso-8859-1"n".
"Content-Transfer-Encoding: 7bitnn".$mesaj."nn";
//se seteaza includerea fisierelor (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 datele 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: base64nn".$data ."nn".
'--'.$mime_boundary."n";
}
}
// trimite e-mail-ul
if (mail($to, $subiect, $msg, $headers)) {
echo 'Mesaj trimis';
}
else {
echo 'Mesaj netrimis';
}
?>

Scriptul trimite si taguri html in corpul mesajului. Pentru a trimite mai multe fisiere odata trebuie sa
adaugati mai multe linii de genul acesta:

$attach[] = array(‘imagine.jpg’, ‘fisier1’, ‘image/jpeg’);

In care argumentul al treilea difera de tipul fisierului.


De exemplu pentru fisiere cu extensia “jpg” argumentul al treilea va fi “image/jpeg”, pentru fisiere cu
extensia “txt” argumentul va fi “text/plain”.

Tutorial PHP: Trimiterea unui email cu PHP –


Functia PHP
March 30, 2013 Leave a comment

Cu ajutorul PHP putem foarte usor sa trimitem un e-mail la o anumita adresa din pagina web. Acest
lucru este util de exemplu in cazul unui formular de contact. Se poate desigur sa lasam pe pagina
adresa de e-mail insa nu este indicat deoarece poate ajunge in mainile oricui intra pe pagina si mai
important poate fi citita de programe bot care trimit spam-uri. Cel mai indicat este un formular de
contact, securizat din punct de vedere abuziv si completarea corecta a datelor.

Ca sa trimiteti un e-mail de pe localhost aveti nevoie de un server de e-mail, daca insa folositi un
serviciu de webhost, acestea au deja un server de e-mail instalat (majoritatea)

Trimiterea mesajelor

SMTP (Simple Mail Transfer Protocol) reprezinta protocolul standard pentru transferul mesajelor prin
intermediul internetului la o adresa de e-mail.
Pentru a putea trimite un e-mail se foloseste functia mail() ce are sintaxa:

mail(‘catre’, ‘subiect’, ‘mesaj’)

Unde “catre” reprezinta adresa de email unde va fi trimis mesajul, “subiect” reprezinta subiectul
mesajului iar “mesaj” reprezinta mesajul trimis.
Functia mai poate sa contina si un al patrulea atribut optional “from” care specifica locatia de unde a
fost trimis mesajul. Daca acest atribut nu este specificat, serverul va trimite mesajul in functie de cum
este configurat.
Aceste atribute pot fi desigur preluate dintr-un formular cu $_POST.
Functia mail() returneaza TRUE daca mesajul a fost trimis, altfel returneaza FALSE.

Exemplu

<?php
// Verifica daca au fost trimise datele de la formular
if (isset($_POST['email']) && isset($_POST['mesaj'])) {
$to = 'adresa@yahoo.com';
$subiect = 'Mesaj de pe site';
$mesaj = $_POST['mesaj'];
$from = 'From: '. $_POST['email'];
//Trimite mesajul prin e-mail
if (mail($to, $subiect, $mesaj, $from)) {
echo 'Mesajul a fost trimis.';
}
else {
echo 'Mesajul nu a fost trimis.';
}
}
?>

In primul rand se verifica cu functia isset() daca au fost trimise din formular e-mail-ul persoanei si
mesajul, dupa care se declara fiecare variabila si se trimite mesajul prin e-mail.
Observati faptul ca variabila $from contine sirul “From: ” inainte de adresa preluata din formular.
Acest lucru este obligatoriu.

Trimiterea tagurilor html prin e-mail

Implicit, functia mail() trimite doar mesaje text simple fara taguri html. pentru a putea trimite si taguri
html prin e-mail este necesara adaugarea anumitor header-e in variabila $from. Aceste hearde-e spun
receptorului ca datele trimise contin si taguri html. pentru acest lucru se folosesc urmatoarele doua
sintaxe:

MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1

Exemplu

<?php
$to = 'adresa@mail.com';
$from = 'adresa@mail.com';
$subiect = 'Un subiect oarecare';
$mesaj = '<h3>Un mesaj</h3>
<div style="color:#10f0ff;border-style:solid;border-width:1px;width:10em;">
Un mesaj oarecareeee</div>';
$ln = "rn"; // Pentru adaugare linie noua
$headers = "From: ".$from.$ln;
$headers .= "MIME-Version: 1.0".$ln;
$headers .= "Content-type: text/html; charset=iso-8859-1".$ln;
if (mail($to, $subiect, $mesaj, $headers)) {
echo 'Mesaj trimis';
}
else {
echo 'Mesaj netrimis';
}
?>

Trimiterea atasamentelor prin e-mail

Trimiterea fisierelor prin e-mail este o munca mai greoaie. Pentru a intelege mai bine studiati
urmatorul exemplu.

<?php
$attach = array(); // variabila ce va contine datele pt atasamente
$to = 'nicu_bogd@yahoo.com';
$from = 'nicu_bogd@yahoo.com';
$subiect = 'Un subiect oarecare';
$mesaj = '<h3"Un mesaj</h3"
<div style="color:#10f0ff;border-style:solid;border-width:1px;width:10em;">
Un mesaj oarecareeee</div"';
// se adauga datele pt fisierele ce vor fi atasate
$attach[] = array('imagine.jpg', 'fisier1', 'image/jpeg');
// 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.0n".
"Content-Type: multipart/mixed;n".
' boundary="'.$mime_boundary.'"';
$msg .= "Un multi-part mesaj in MIME format.nn".
'--'.$mime_boundary."n".
"Content-Type:text/html; charset="iso-8859-1"n".
"Content-Transfer-Encoding: 7bitnn".$mesaj."nn";
//se seteaza includerea fisierelor (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 datele 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: base64nn".$data ."nn".
'--'.$mime_boundary."n";
}
}
// trimite e-mail-ul
if (mail($to, $subiect, $msg, $headers)) {
echo 'Mesaj trimis';
}
else {
echo 'Mesaj netrimis';
}
?>

Scriptul trimite si taguri html in corpul mesajului. Pentru a trimite mai multe fisiere odata trebuie sa
adaugati mai multe linii de genul acesta:

$attach[] = array(‘imagine.jpg’, ‘fisier1’, ‘image/jpeg’);

In care argumentul al treilea difera de tipul fisierului.


De exemplu pentru fisiere cu extensia “jpg” argumentul al treilea va fi “image/jpeg”, pentru fisiere cu
extensia “txt” argumentul va fi “text/plain”.

S-ar putea să vă placă și