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 înFromși adresa vizitatorului înReply-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.