mail()
Parašė flapas 2010 liepos 29 14:07:51
Funkcija mail()
Supažindinama su labai plačiai naudojama mail() funkcija, kurios paskirtis - iš PHP skripto siųsti el. pašto laiškus.

PHP.ini konfiguravimas

Atkreipkite dėmesį, kad dažniausiai jei jūs testuojate skriptus ant Windows platformos, jums mail() funkcija neveiks. Neveiks todėl, kad php.ini faile pagal nutylejimą SMTP serveris nurodytas localhost, o didžiausia tikymybe yra ta, kad pas jus localhost'e SMTP serverio nėra (nebent naudojate Windows Server), todėl savo ekrane matysite tik štai tokį užrašą:

Warning: Failed to Connect in C:\kelias\kelias\failas.php on line XX.

PHP negali prisijungti prie SMTP serverio. To galite išvengti įrašę php.ini faile SMTP=jums_žinomas_smtp_serverio_adresas. Jei pas jus PHP ne kaip CGI, neužmirškite perkrauti Apache serverio.

Pradmenys

Taigi, ką daro mail() funkcija? mail() funkcija leidžia jums siųsti el.paštą tiesiai iš jūsų kodo. Ji dažniausiai naudojama kontaktų, registravimo formose, kai tam tikru adresu norima informuoti apie užpildytą formą. Bet pritaikymo būdų yra begalė.

bool mail(string to, string subject, string message [, string additional_headers [, string
additional_parameters ])

Mail funkcija grąžina boolean tipą (true/false). Jei mail funkcija grąžina false, reiškia el. pašto išsiųsti nepavyko. Štai kaip siunčiamas paprasčiausias el. laiškas:

<?php
mail(' webmaster@php.ltŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript ','Čia norima tema (subject)','Ir einanti žinutė');
?>

Taigi, kaip matote, pirmasis mail argumentas - tai el. pašto adresas, kuriam siunčiate el.paštą, paskui rašoma tema (subject), o po temos - ir žinutės tekstas. Žinutės tekste, norint nukelti tekstą į naują eilutę, įterpkite \n (new line|nauja eilutė), pvz.:

<?php $tekstas = "mano žinutė\n\nJonas Jonaitis\nSkripteris";?>

Po žinutės gali būti papildomi parametrai: antraštės (headers), bei kiti papilomi parametrai. Tik išsiuntus šį el. laišką pastebėsite, kad el. žinutėje nėra (kai kurių) lietuviškų raidžių. Jų nėra dėl netinkamos el. žinutės koduotės. Žinutės koduotė yra nustatoma žinutės antraštėje (header).

Antraštės (headers)

Pastaba: žinutės antraštės yra atskiriamos "\r\n".

Antraštėse galima nurodyti daug įdomių bei naudingų dalykų: nuo ko siunčiamas laiškas, laiško koduotė, reply-to laukas, mailer'is, bcc ir t. t. Štai pavyzdys paprasčiausios antraštės, kuri turėtų būti kiekviename laiške:

<?php
$header = "Content-type: text/plain; charset=\"windows-1257\"\r\n";
$header .= "From: Nikolajus Krauklis <mano@el_pastas.lt>\r\n";
$header .= "Reply-to: mano@el_pastas.lt\r\n";
mail(' webmaster@php.ltŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript ','Čia norima tema (subject)','Ir einanti žinutė',$header);
?>

Content type nurodome, kad žinutė bus paprastu (plain) tekstu, ne HTML, bei windows-1257 charset'u (simbolių rinkiniu). Išsiuntus laišką su šia antrašte galite būti įsitikinęs, kad Windows vartotojai gaus jūsų išsiųstą el.žinutę su visom lietuviškomis raidėmis. From antraštėje nurodome, nuo ko siunčiamas laiškas. Siuntėjas/gavėjas gali būti norodomas štai tokiais būdais:

<?php
/*
* paste iš kažkokio RFC, susijusio su meil'ais
*
* From: mark@cbosgd.UUCPŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript
* From: mark@cbosgd.UUCPŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript (Mark Horton)
* From: Mark Horton < mark@cbosgd.UUCPŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript >
* From: "Mark Horton" < mark@cbosgd.UUCPŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript >
*/
?>

Reply-to - kur siųsti atsakymą. Pagal nutylėjimą, jei nėra reply-to, jūsų mailer'is atsakys asmeniui, kuris atsiuntė šį laišką, bei jei yra reply-to, paspaudus mailer'yje (outlook'e, bat'e,
mutt'e ir t.t.) reply, to: lauke atsiras reply-to el.pašto adresas.

Štai dar papildomos antraštės, kurios gali praversti:

<?php
$headers .= "X-Mailer: mano PHP mailer'is\r\n"; // mailer'is
$headers .= "X-Priority: 3\r\n"; // žinutės tipas: 1 UrgentMessage, 3 Normal
$headers .= "Return-Path: < mail@server.comŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript >\r\n"; //kur grąžinti laiškąą, ištikus klaidai
mail(' webmaster@php.ltŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript ','Čia norima tema (subject)','Ir einanti žinutė',$headers);
?>

X-Mailer - tai niekur nedominuojantis headeris.
Priority - žinutės prioritetas. Aukščiausias - 1, normalus - 3.
Return-path - tai el.pašto adresas, į kurį bus nukreipiamos visos klaidas (pvz.: el.žinutė nepasiekė reikiamo neveikiančio serverio, arba tokio el. pašto adreso jau nebėra sistemoje).

Kaip nusisiųsti el. žinutės kopiją sau? Yra trys galimybės:

1. Pats paprasčiausias - nurodyti To laukelį štai taip:

<?php
$to = "Kažkoks vartotojas < pvz@pvz.ltŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript >" . ", ";
$to .= "Mano el. paštas < mano@elpastas.ltŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript >";
mail($to,'Žinutė dviem gavėjams','Tekstas');
?>

2. Savo el. pašto adresą nurodyti Cc antraštės laukelyje:

<?php
$header .= "cc: mano@elpastas.ltŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript \r\n";
?>

Šiuo atveju visi gavėjai matys, kam buvo siunčiamas gautas el.paštas.

3. Naudotis antraštės Bcc laukeliu:

<?php
$header .= "bcc: mano@elpastas.ltŠis el. pašto adresas apsaugotas nuo spam'o, peržiūrėjimui reikia įjungti JavaScript \r\n";
?>

Dabar gavėjai nepastebės, kad laiško kopija buvo nusiųsta ir jums.

Keletas apibendrintų dalykų

Žinutės taip pat gali būti siunčiamos ir HTML formatu, tada antraštė atrodytų taip:

<?php $header = "Content-type: text/plain; charset=\"windows-1257\"\r\n";?>

Dabar el. žinutėje galite naudoti ir HTML žymes (pastaba: ne visi mailer'iai turi galimybę rodyti el. žinutes HTML formatu).


Šaltinis: ipamokos.lt