mail

(PHP 4, PHP 5, PHP 7)

mailTrimite mesaje e-mail

Descrierea

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

Trimite un mesaj e-mail.

Parametri

to

Destinatarul sau destinatarii mesajului.

Formatul acestui string trebuie să respecte » RFC 2822. Unele exemple:

subject

Subiectul mesajului spre a fi trimis.

Precauţie

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.

Precauţie

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

Valorile întoarse

Î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.

Istoricul schimbărilor

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.

Exemple

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($message70"\r\n");

// Trimiterea
mail('[email protected]''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      
'[email protected]';
$subject 'the subject';
$message 'hello';
$headers 'From: [email protected]"\r\n" .
    
'Reply-To: [email protected]"\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
('[email protected]''the subject''the message'null,
   
'[email protected]');
?>

Example #4 Transmiterea unui mesaj HTML

Este posibil de a trimite mesaje HTML cu mail().

<?php
// Destinatari multipli
$to  '[email protected]', '// observați virgula
$to .= '[email protected]';

// 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 <[email protected]>, Kelly <[email protected]>' "\r\n";
$headers .= 'From: Birthday Reminder <[email protected]>' "\r\n";
$headers .= 'Cc: [email protected]"\r\n";
$headers .= 'Bcc: [email protected]"\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.

Note

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 <[email protected]>". 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.

A se vedea și