You are on page 1of 11

Trimiterea de email din PHP Funcia mail oferit de PHP este suficient pentru a trimte emailuri din scripturi

PHP n condiiile n care scriptul este gzduit pe un server nonlocal, ce ofer i servicii SMTP. n acest caz configurarea funciei mail se face indicnd o serie de argumente (destinatar, titlu, coninut, antet HTTP) ca n urmtorul tutorial: http://www.w3schools.com/PHP/php_mail.asp Dac ns dorim s trimitem/testm emailuri trimise dintr-un site local aflat n lucru (deci de pe localhost) e ceva mai complicat. Se poate folosi pe post de server SMTP unul din serverele consacrate de e-mail, de exemplu Gmail. Cu unele limitri (nr. de emailuri / zi sau pe minut), serverele publice de e-mail ne permit s le folosim pe post de releu intermediar ntre localhost i destinatarii e-mailurilor. Condiiile care trebuie ndeplinite sunt: 1. S avem un cont pe Gmail 2. S realizm o conexiune de la localhost la Gmail de tip securizat (protocolul SSL sau TLS), la portul 465 (SSL) sau 587 (TLS), la adresa smtp.gmail.com; un mic neajuns este c nu putem seta expeditorul mesajului, Gmail l substituie automat cu contul de Gmail pe care l exploatm ca releu. n principiu conectarea de la localhost la orice server se poate realiza prin configurri simple fcute n php.ini: [mail function] ; For Win32 only. ; http://php.net/smtp SMTP = localhost ; http://php.net/smtp-port smtp_port = 25 Teoretic, localhost se poate nlocui cu adresa serverului SMTP de la Gmail, la fel i portul. ns acest mod de conectare NU este securizat, i Gmail impune securizarea! Conectarea securizat de la localhost la Gmail se poate realiza pe 2 ci: 1. Cu ajutorul unui server de email local, precum Mercury (inclus n XAMPP); 2. Cu ajutorul unei biblioteci de funcii PHP ce asigur securizarea, precum PEAR (inclus n XAMPP). Dac nu folosim XAMPP, cele 2 instrumente trebuie instalate separat. Varianta PEAR E ceva mai simpl, deoarece nu necesit configurri suplimentare (atta timp ct folosim XAMPP care conine PEAR n folderul xampp\php\PEAR): <?php require_once "..\php\PEAR\Mail.php"; //verificati daca biblioteca se afla la aceasta cale!

$exp = "expeditor@xx.com"; //aici scrieti expeditorul (Gmail l substituie!) $dest = "destinatar@yahoo.com"; //adresa la care trimiteti emailul $subiect = "Mesaj de test"; //titlul $mesaj = "Salut,\n\nAcesta e un mesaj"; //continutul mesajului $server = "ssl://smtp.gmail.com"; //adresa serverului SMTP, in acest caz Gmail securizat $port = "465"; //portul Gmail securizat $user = "xxxx@gmail.com"; //contul vostru de Gmail $parola = "xxxxx"; //parola voastra de Gmail (atentie, sa nu o vada cineva!) $antet = array ('From' => $exp, 'To' => $dest, 'Subject' => $subiect); $smtp = Mail::factory('smtp', array ('host' => $server, 'port' => $port, 'auth' => true, 'username' => $user, 'password' => $parola)); $mail = $smtp->send($dest, $antet, $continut); if (PEAR::isError($mail)) { echo("<p>" . $mail->getMessage() . "</p>"); } else { echo("<p>Mesaj trims!</p>"); } ?> Varianta Mercury Pornii Mercury din XAMPP Control Panel n consola Mercury, se selecteaz modulele Mercury necesare: Configuration-Protocol Modules, care are ca efect apariia ferestrei:

Se selecteaz modulele SMTP server, SMTP relaying client (opional, POP3 server pentru clieni de tip Outlook): SMTP server va asigura trimiterea de e-mailuri; SMTP relaying client asigur funcia de releu spre Gmail. Dac Mercury e folosit ca server SMTP de sine stttor (gzduit pe un server real), n loc de SMTP relaying client se va selecta SMTP end-to-end delivery client. n urma seleciilor, restartm Mercury. Consola Mercury va conine 4 ferestre (cele trei instrumente activate, plus nucleul Mercury Core Process). Le aranjm cu Window-Tiles s le vedem mai uor:

Se configureaz nucleul Mercury Core Process, prin Configuration - Mercury core module:

Pe pagina General, se stabilete numele localhost ca fiind numele cu care va fi identificat serverul Mercury, i Admin ca fiind utilizatorul care va accesa serverul1. Aceste date sunt folosite de PHP pentru a se conecta la Mercury. Se configureaz serverul SMTP, prin Configuration - MercuryS SMTP server:

Ali utilizatori, cu nume i parole, pot fi definii prin Configuration - Manage local users.

Pe pagina General, se stabilete localhost ca fiind numele cu care se va anuna serverul Mercury n Internet i 127.0.0.1 adresa IP care va fi ascultat de Mercury (127.0.0.1 e adresa special asociat domeniului localhost). Apoi, pe pagina Connection Control se efectueaz dou operaii: cu Add restriction se definete plaja de adrese IP care au dreptul s foloseasc serverul Mercury ca releu (altfel exist riscul ca alte calculatoare s se conecteze la Mercury i s trimit propriile e-mailuri); conform imaginii, plaja IP e limitat la 127.0.0.1, deci e-mailurile se vor putea trimite doar de pe localhost; Se dezactiveaz eventualele casete care ar putea interzice funcionarea releului Mercury (Do not permit SMTP relaying blocheaz funcionarea releului)

Se configureaz releul Mercury, prin Configuration-MercuryC relay client

Datele introduse sunt: Smart host name: adresa serverului SMTP public (smtp.gmail.com); Connection port/type: portul i tipul conexiunii ntre releu i serverul public (securizat pe portul 465 pentru Gmail); Announce myself as: Numele cu care Gmail s identifice releul (SMTP sau altul); Credentials for SMTP Authentication: numele i parola contului VOSTRU de Gmail (va figura drept expeditor al e-mailurilor). Opional se poate configura i serverul POP3 (cu aceleai date ca SMTP server dar portul 110), dac dorim posibilitatea de a conecta clieni POP3 (Outlook) la serverul Mercury. Avnd serverul Mercury configurat, nu trebuie fcute nici modificri n php.ini, iar scriptul poate folosi funcia de baz, mail: <?php mail("destinatar@yahoo.com","titlu","continut","From:expeditor@xx.com"); ?>

Ultimul argument al funciei poate conine oricare din cmpurile antetului HTTP (Cc, Bcc dac vrem s se trimt copii la alte adrese, MIME-Version, Content-type dac vrem s trimite emailuri HTML sau cu diacritice etc.) Exemple de alterare a antetului HTTP n diverse scopuri (mesaje HTML sau mesaje cu ataament) gsii la adresa: http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php#attachment Un alt exemplu de trimitere cu ataament: http://xahlee.org/php/send_mail_attachment.html Consultai i exemplele din documentaia oficial a funciei mail: http://php.net/manual/en/function.mail.php

<?php $To =trim($_POST['To']); $From =trim($_POST['From']); $FromName=trim($_POST['FromName']); $Subject =trim($_POST['Subiect']); $message = trim($_POST['Corp']); $headers = "From: $From\r\n"."FromName: $FromName\r\n"; $success = mail($To, $Subject, $message, $headers);?>

$headers = "From: $From\r\n"."FromName: $FromName\r\n"; $headers .= "Content-type: text/html\r\n"; $headers .= "Content-type: X-Mailer: php\r\n"; Corpul mesajului este o pagina HTML n cazul nostru aceast pagin conine factura proform. Modalitatea de transmitere a unui mesaj n format HTML din interiorul unei pagini PHP este: $To=trim($_POST['To']); $From = "fastcomputers@www.fastcomputers.ro"; $FromName="fastcomputers@www.fastcomputers.ro"; $subject = "FACTURA PROFORMA"; $s= '<HTML>'; $s=$s. '<HEAD>'; $s=$s.'<TITLE>';

$s=$s.'Factura proforma'; $s=$s.'</TITLE>'; $s=$s.`` $message = $s; $headers = "From: $From\r\n"."FromName: $FromName\r\n"; $headers .= "Content-type: text/html\r\n"; $headers .= "Content-type: X-Mailer: php\r\n"; $success = mail($To, $subject,$message, $headers);