mail în PHP

Trimite un email folosind serverul de email configurat pe server (sendmail sau SMTP din php.ini).

Sintaxă
mail(string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = ''): bool

Ce face mail

mail predă mesajul programului de email al serverului (de obicei sendmail). Este cea mai simplă metodă de a trimite un email din PHP, de exemplu o notificare când cineva completează formularul de contact.

Antetele suplimentare se dau ca tablou (din PHP 7.2): From, Reply-To, Content-Type. Pentru diacritice în corpul mesajului setezi Content-Type: text/plain; charset=UTF-8, iar subiectul cu diacritice trebuie codat, de exemplu cu mb_encode_mimeheader.

Pentru site-uri reale, emailurile trimise cu mail ajung des în spam, pentru că serverul nu are autentificare SMTP, SPF sau DKIM configurate. Pentru volume mari sau livrare sigură se folosesc biblioteci ca PHPMailer sau Symfony Mailer, cu un server SMTP autentificat.

Parametri

Parametru Descriere
$to Adresa destinatarului (sau mai multe, separate prin virgulă).
$subject Subiectul. Nu poate conține linii noi.
$message Corpul mesajului. Liniile se separă cu \r\n și nu ar trebui să depășească 70 de caractere.
$additional_headers Opțional. Antete suplimentare, ca tablou ["From" => "..."] sau ca text.
$additional_params Opțional. Parametri pentru sendmail, de exemplu "-fnoreply@site.ro".

Ce returnează

true dacă mesajul a fost predat serverului de email, altfel false. Nu garantează că a ajuns la destinatar.

Exemple

Exemplul 1: Notificare din formularul de contact

<?php
$nume = "Ana Popescu";
$email = "ana@exemplu.ro";
$mesaj = "Bună ziua! Aș dori o ofertă pentru un site de prezentare.";

$trimis = mail(
    "contact@dexblog.ro",
    mb_encode_mimeheader("Mesaj nou de la $nume", "UTF-8"),
    wordwrap($mesaj, 70, "\r\n"),
    [
        "From" => "noreply@dexblog.ro",
        "Reply-To" => $email,
        "Content-Type" => "text/plain; charset=UTF-8",
    ]
);

echo $trimis ? "Mesajul a fost trimis." : "Mesajul nu a putut fi trimis.";

Rezultat în browser

Mesajul a fost trimis.

Greșeli frecvente

  • Pui adresa vizitatorului în antetul From. Serverele de email resping sau marchează ca spam mesajele „de la” un domeniu care nu îți aparține. Pune adresa ta în From și adresa vizitatorului în Reply-To.
  • Pui în subiect sau antete text venit din formular fără verificare. Un atacator poate adăuga linii noi și destinatari ascunși (email header injection). Validează emailul cu filter_var și elimină caracterele \r și \n.
  • Consideri că true înseamnă email livrat. Înseamnă doar că serverul a acceptat mesajul pentru trimitere.

Comenzi înrudite

  • filter_var: Validează sau curăță o valoare: email, număr întreg, URL, adresă IP, valoare booleană.
  • htmlspecialchars: Transformă caracterele speciale HTML în entități, ca textul să fie afișat în siguranță în pagină.
  • header: Trimite un antet HTTP către browser: redirecționare, tipul conținutului, descărcare de fișier, cache.