La funzione mail() è integrata in PHP e serve a inviare messaggi di posta elettronica direttamente da un server web. È un modo semplice per inviare notifiche, messaggi di moduli di contatto, conferme d’ordine e altri tipi di messaggi.

È adatta per le funzionalità di base delle e-mail senza l’uso di librerie esterne.

Come funziona mail()

Quando si chiama la funzione mail(), PHP passa l’e-mail all’agente di trasferimento della posta (MTA) installato sul server (in genere Sendmail o Postfix). L’MTA elabora e consegna il messaggio all’indirizzo specificato.

Sintassi

mail(to, subject, message, headers, parameters);

Parametri

ParametroDescrizione
$aIndirizzo e-mail del destinatario. È possibile specificare più indirizzi separati da virgole.
$soggettoOggetto dell’e-mail. Non deve contenere interruzioni di riga.
$messaggioCorpo principale del messaggio.
$intestazioniIntestazioni aggiuntive come From, Reply-To, Cc, Bcc, ecc.
$parametriParametri extra, come la specificazione del mittente per Sendmail (-f).

Esempio semplice

<?php
$to = "user@example.com";
$subject = "Test Email";
$message = "Hello! This is a test email sent using PHP.";
$headers = "From: webmaster@yourdomain.com";

mail($to, $subject, $message, $headers);
?> 

Note importanti

1. Da: L’intestazione è necessaria

Se non si specifica l’intestazione From:, la maggior parte dei server di posta rifiuterà il messaggio come sospetto o come spam.

$headers = "From: noreply@yourdomain.com";

2. Formattazione di messaggi a più righe

Usare \r\n per separare le righe del messaggio:

$messaggio = "Salve, grazie per il vostro ordine;

3. Intestazioni multiple

Usare \r\n per separare intestazioni multiple come Reply-To, Cc e Bcc:

$headers = "From: admin@yourdomain.com\r\n";
$headers .= "Reply-To: support@yourdomain.com\r\n";
$headers .= "Cc: someone@yourdomain.com\r\n";

Esempio: Invio di un’e-mail HTML (solo testo)

La funzione mail() non supporta nativamente gli allegati. Tuttavia, è possibile inviare e-mail in HTML o impostare manualmente il tipo di contenuto:

$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: info@yourdomain.com";
$message = "<h1>Hello!</h1><p>Your order has been received.</p>";
mail("user@example.com", "Order Confirmation", $message, $headers);
Problemi comuni e soluzioni
ProblemaCausa / Soluzione
Email non consegnateManca l’intestazione From: o l’IP del server è in una blacklist
L’e-mail non viene inviata affattoNon è installato alcun MTA (ad esempio, è necessario Sendmail/Postfix)
Errore: mail() è stato disabilitatomail() è disabilitato in php.ini (spesso per policy dell’host)
Il testo russo appare come ????Charset non impostato su UTF-8 nelle intestazioni
Le e-mail finiscono nello spamFrom errato, assenza di SPF/DKIM o dominio non configurato correttamente

Conclusione

La funzione mail() è uno strumento basilare ma potente per inviare e-mail direttamente da script PHP. È:

  • Facile da usare
  • Non richiede librerie aggiuntive
  • Adatta per notifiche interne, moduli di contatto e autoresponder

Tuttavia, bisogna tenere presente le sue limitazioni:

  • Dipende dalla configurazione della posta del server
  • Non supporta gli allegati
  • Può essere disabilitato per impostazione predefinita su alcuni ambienti di hosting condiviso

Se si prevede di inviare e-mail regolarmente, assicurarsi che il server sia configurato correttamente per la posta in uscita (con Sendmail/Postfix installato, record SPF/DKIM impostati e mail() abilitato in php.ini).