Curs Php-mysql

Part. 1

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().

1. Expedierea mesajelor de e-mail ce contin tag-uri HTML

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 aranjamente speciale este indicat sa utilizati tabele si coloane HTML

2. Trimitere e-mail-uri ce contin si atasamente

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[]".
- Scriptul a fost testat cu succes pe serverul acestui site. Pt. a functiona corect depinde si de setarile, permisiunile serverului, in principal sa aibe functia mail() activa. Part. 1

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag creaza un text ingrosat?
<q> <strong> <em>
<p>Adresa: <strong>http://CoursesWeb.net/</strong> - Tutoriale.</p>
Care din aceste coduri CSS afiseaza textul ingrosat?
text-size: 18px; font-style: italic; font-weight: 800;
#id {
  font-weight: 800;
}
Ce functie JavaScript apeleaza o alta functie, in mod repetat, la un anumit interval de timp?
setInterval() setTimeout() push()
function someFunction() { alert("CoursesWeb.net"); }
setInterval("someFunction()", 2000);
Clic pe variabila definita corect in PHP.
var vname = 8; $vname = 8; $vname == 8;
$vname = 8;
echo $vname;
Care din urmatoarele forme ale verbului "travel" (a calatori) e la timpul Prezent Perfect?
have traveled shall travel had traveled
We have traveled in space.
- Noi am calatorit (deja) in spatiu.
Care din urmatoarele forme ale verbului "pintar" (a picta) se foloseste la Trecutul Imperfect?
ir a pintar pintaba pintó
La niña pintaba un arco iris.
- Fetita picta un curcubeu.
Trimitere e-mail ce contine tag-uri HTML si atasamente

Last accessed pages

  1. Teste PHP - incepatori (4399)
  2. Instructiuni conditionale if() else, switch (4781)
  3. Prezentul continuu - Exercitii si teste incepatori (38612)
  4. Recapitulare generala la verbe (1143)
  5. Teste spaniola - Tests y ejercicios de Español - Gramática (27668)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (747)
  2. Coduri pt culori (329)
  3. Gramatica limbii engleze - Prezentare Generala (318)
  4. Exercitii engleza - English Tests and exercises - Grammar (317)
  5. Cursuri limba engleza gratuite si lectii online (302)