(PHP 4, PHP 5, PHP 7)
mail — Trimite mesaje e-mail
$to
, string $subject
, string $message
[, string $additional_headers
[, string $additional_parameters
]] )Trimite un mesaj e-mail.
to
Destinatarul sau destinatarii mesajului.
Formatul acestui string trebuie să respecte » RFC 2822. Unele exemple:
subject
Subiectul mesajului spre a fi trimis.
Subiectul trebuie să satisfacă cerințelor » RFC 2047.
message
Mesajul spre a fi trimis.
Fiecare rând trebuie să fie încheiat cu CRLF (\r\n). Lungimea rândurilor nu trebuie să depășească 70 de caractere.
(Numai pentru Windows) Când PHP conlucrează direct cu un server SMTP, dacă este întâlnit un punct la începutul unui rând, el este eliminat. Pentru a depăși aceste situații, dublați punctul de la începutul rândului.
<?php
$text = str_replace("\n.", "\n..", $text);
?>
additional_headers
(opțional)Un string spre a fi inserat la sfârșitul antetelor mesajului.
Acesta este utilizat de obicei pentru a adăuga antete suplimentare (From, Cc, și Bcc). Antetele suplimentare multiple trebuie separate cu CRLF (\r\n). Dacă pentru a stabili acest antet se folosesc date externe, ele trebuie filtrate, astfel încât să nu fie posibilă inserarea antetelor nedorite.
Notă:
additional_headers
nu are o protecție împotriva injectării antetelor de email. De aceea utilizatorii trebuie să se asigure că antetele specificate sunt în siguranță și că conțin doar antete. De ex. niciodată nu începeți corpul mesajului inserând mai multe linii noi.
Notă:
La trimiterea mesajului, acesta trebuie să conțină antetul From. Acesta poate fi stabilit cu ajutorul parametrului
additional_headers
, sau poate fi stabilită o valoare implicită în php.ini.În caz că nu se respectă această condiție, se va produce un mesaj de eroare similar cu acesta: Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing (Avertizare: mail(): "sendmail_from" nu este stabilit în php.ini sau antetul "From:" lipsește). Antetul From stabilește de asemenea Return-Path în Windows.
Notă:
Dacă mesajele nu sunt primite, încercați să utilizați numai LF (\n). Unii agenți de transfer a mesajelor în Unix (în special » qmail) înlocuiesc LF cu CRLF în mod automat (ceea ce duce la dublarea CR dacă este utilizat CRLF). Utilizați acest procedeu numai în caz excepțional, deoarece acesta nu se conformaeză cu » RFC 2822.
additional_parameters
(opțional)
Parametrul additional_parameters
poate fi
utilizat pentru a transmite fanioane suplimentare programului
configurat pentru a transmite poșta, definit de opțiunea de configurare
sendmail_path. Spre exemplu, acesta poate fi utilizat
pentru a stabili adresa expeditorului de pe plic când se utilizează
sendmail cu opțiunea -f.
Acest parametru este filtrat cu escapeshellcmd() în mod automat pentru a preveni execuția comenzilor. escapeshellcmd() previne execuția comenzilor, dar permite adăugarea parametrilor suplimentari. Din punct de vedere al securității este recomandabil ca utilizatorul să filtreze și să verifice acest parametru pentru a evita adăugarea parametrilor nedoriți la comanda pentru înveliș.
Deoarece escapeshellcmd() este aaplicată în mod automat, unele caractere care sunt permise în adrese email de standardele RFC, nu pot fi utilizate. Funcția mail() nu poate permite asemenea caractere, de aceea în programele în care este necesară utilizarea acestor caractere, se recomandă utilizarea metodelor alternative de transmitere a email-urilor (de ex. utilizarea unui framework sau a unei biblioteci).
Utilizatorul cu care rulează serveul web trebuie adăugat în calitate de utilizator de încredere în configurația sendmail pentru a preveni adăugarea unui antet 'X-Warning' la mesaj atunci când expeditorul de pe plic (-f) este stabilit prin această metodă. Pentru utilizatorii sendmail acest fișier este /etc/mail/trusted-users.
Întoarce TRUE
dacă mesajul a fost acceptat cu succes pentru trimitere,
FALSE
în caz contrar.
Este important să știți că cu toate că mesajul a fost acceptat spre trimitere, aceasta NU înseamnă că mesajul într-adevăr va ajunge la destinație.
Versiune | Descriere |
---|---|
4.2.3 |
Parametrul additional_parameters este dezactivat
în safe_mode și funcția
mail() va emite un mesaj de avertizare și va
întoarce FALSE atunci când este utilizat.
|
Example #1 Trimiterea mesajelor.
Utilizarea mail() pentru a transmite un mesaj simplu:
<?php
// Mesajul
$message = "Line 1\r\nLine 2\r\nLine 3";
// În caz că vre-un rând depășește 70 de caractere, trebuie să utilizăm
// wordwrap()
$message = wordwrap($message, 70, "\r\n");
// Trimiterea
mail('caffeinated@example.com', 'My Subject', $message);
?>
Example #2 Trimiterea unui mesaj cu antete suplimentare.
Adăugarea antetelor de bază, transmițându-i MUA adresele From și Reply-To:
<?php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
Example #3 Trimiterea unui mesaj cu un parametru suplimentar în linia de comandă.
Parametrul additional_parameters
poate fi utilizat
pentru a transmite un parametru suplimentar programului configurat pentru
a fi utilizat la trimiterea poștei cu ajutorul
sendmail_path.
<?php
mail('nobody@example.com', 'the subject', 'the message', null,
'-fwebmaster@example.com');
?>
Example #4 Transmiterea unui mesaj HTML
Este posibil de a trimite mesaje HTML cu mail().
<?php
// Destinatari multipli
$to = 'aidan@example.com' . ', '; // observați virgula
$to .= 'wez@example.com';
// Subiectul
$subject = 'Birthday Reminders for August';
// Mesajul
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
// Pentru a trimite mesaje HTML, trebuie stabilit antetul Content-type
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Antete suplimentare
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";
// Trimiterea mesajului
mail($to, $subject, $message, $headers);
?>
Notă:
Dacă se intenționează trimiterea mesajelor HTML, sau a altor mesaje complexe, este recomandată utilizarea pachetului PEAR » PEAR::Mail_Mime.
Notă:
Implementarea funcției mail() în Windows diferă în multe aspecte de cea din Unix. În primul rând ea nu utilizează un binar local pentru a compune mesajele, dar operează direct asupra socket-urilor, ceea ce înseamnă că este necesar ca un MTA să asculte pe un socket de rețea (care poate fi pe serverul local sau pe unul îndepărtat).
În al doilea rând, antetele personalizate, cum ar fi From:, Cc:, Bcc: și Date: nu sunt interpretate de către MTA în primul rând, dar sunt procesate de PHP.
Prin urmare, parametrul
to
nu trebuie să fie o adresă de forma "Ceva <cineva@exemplu.com>". Comanda mail poate să nu prelucreze aceasta în mod corect în timp ce conlucrează cu MTA.
Notă:
Face de menționat că funcția mail() nu este potrivită pentru volume mari de masaje trimise consecutiv. Această funcție deschide și închide socket-ul SMTP pentru fiecare mesaj, ceea ce nu este foarte eficient.
Pentru transmiterea volumelor mari de mesaje considerați pachetele » PEAR::Mail și » PEAR::Mail_Queue.
Notă:
Următoarele RFC-uri pot fi de folos: » RFC 1896, » RFC 2045, » RFC 2046, » RFC 2047, » RFC 2048, » RFC 2049 și » RFC 2822.