Email PHP · 4 min read · Oct 25, 2025

Invio di Email da PHP

Invio di Email da PHP

Questo tutorial mostra come puoi facilmente inviare messaggi email da un server web abilitato PHP. Può essere utilizzato per elaborare i dati dei moduli, inviare avvisi, ecc. Spiega anche un po ‘sul formato delle intestazioni delle email.

Configurazione del Sistema

Ovviamente è necessario avere un server web installato insieme a PHP. Devi anche assicurarti che il tuo sistema operativo abbia installato un agente email (ad esempio Sendmail su Linux o servizio SMTP sotto IIS). E assicurati che la porta 25 non sia bloccata. Questo è necessario anche se inoltri messaggi tramite un secondo server.

La funzione mail di PHP è abilitata per impostazione predefinita. Tuttavia, puoi specificare le opzioni aggiuntive nel file ‘php.ini’ nella sezione [mail function] (linea # intorno a 700).

Sintassi

Ecco la sintassi completa del comando mail():

bool mail ( string $email_address_to, string $subject, string $message_contents [, string $additional_headers [, string $additional_parameters]] );

I primi 3 parametri non richiedono alcuna spiegazione: indirizzo email del destinatario, oggetto del messaggio, contenuto del messaggio. Il parametro $additional_headers include le intestazioni email che elencherò più avanti. $additional_parameters viene utilizzato per passare opzioni specifiche per il programma utilizzato per inviare email (come sendmail) ed è raramente utilizzato. Devi controllare le pagine man di sendmail per l’elenco delle opzioni.

Il minimo assoluto richiede di specificare questi:

mail ( $email_address_to , $subject, $message_contents );

Tuttavia, è consigliato definire intestazioni aggiuntive per motivi di conformità. Il messaggio email deve essere compatibile con RFC #822.

L’esempio qui sotto mostra alcune intestazioni email che possono essere utilizzate:

  • From: L’indirizzo email del mittente.
  • Reply-To: L’indirizzo email a cui devono essere inviate le risposte.
  • Return-Path: Questo viene utilizzato nel caso in cui il messaggio non venga consegnato e debba essere restituito.
  • Subject: Oggetto dell’email.
  • CC: Copia Conoscenza. Un elenco separato da virgole di ulteriori destinatari che sarà visibile a tutti gli altri destinatari.
  • BCC: Copia Conoscenza Nascosta. Un elenco separato da virgole di ulteriori destinatari che non sarà visibile a nessun altro destinatario.
  • Content-type: Definisce il tipo MIME del messaggio.
  • X-Mailer: Specifica il client email utilizzato per inviare il messaggio.

La cosa importante da ricordare è che i nomi delle intestazioni sono case-sensitive e che ogni intestazione deve terminare con caratteri return e newline.

Ogni messaggio viene instradato tramite un minimo di 2 server email (mittente e destinatario). Tuttavia, potrebbero esserci più server email nel percorso, come server di inoltro, server antiSPAM, ecc. Ognuno di essi aggiungerà le proprie intestazioni al tuo messaggio. Devi anche tenere presente che il tuo server web potrebbe, a seconda delle impostazioni, scambiare alcuni campi delle intestazioni come Return-Path. Nota che questo campo non influisce sull’indirizzo di risposta.

Esempio

Ecco un semplice esempio che invierà un messaggio email:

Esempio Completo

Questo esempio mostra una struttura più organizzata con più opzioni e più intestazioni:

";
   $email_return_to = "[email protected]";
   $email_content_type = "text/html; charset=us-ascii";
   $email_client = "PHP/" . phpversion();
// ------------------------- //

// --- DEFINISCI INTERRUZIONI --- //
   $email_header = "From: " . $email_sender . "\r\n";
   $email_header .= "Reply-To: " . $email_return_to . "\r\n";
   $email_header .= "Return-Path: " . $email_return_to . "\r\n";
   $email_header .= "Content-type: " . $email_content_type . "\r\n";
   $email_header .= "X-Mailer: " . $email_client . "\r\n";
// ---------------------- //

// --- OGGETTO E CONTENUTI --- //
   $email_subject = "Oggetto email di prova";
   $email_contents = "";
   $email_contents .= "

Email di Prova

"; $email_contents .= "
Mittente: " . $email_sender; $email_contents .= "
Destinatario: " . $email_recipient; $email_contents .= ""; // ---------------------------- // $email_result = mail($email_recipient, $email_subject, $email_contents, $email_header); if ($email_result) echo "L'email è stata inviata!"; else echo "L'email è fallita!"; ?>
  • Nota: L’implementazione di mail() su Windows differisce in molti modi dall’implementazione Unix. Prima di tutto, non utilizza un binario locale per comporre messaggi, ma opera solo su socket diretti, il che significa che è necessario un MTA in ascolto su un socket di rete (che può essere sia sulla macchina locale che su una macchina remota). In secondo luogo, le intestazioni personalizzate come From:, Cc:, Bcc: e Date: non vengono interpretate dal MTA in primo luogo, ma vengono analizzate da PHP. Pertanto, il parametro to non dovrebbe essere un indirizzo nella forma di “Qualcosa < [email protected] >”. Il comando mail potrebbe non analizzarlo correttamente durante la comunicazione con il MTA.
  • Nota: Vale la pena menzionare che la funzione mail() non è adatta per volumi maggiori di email in un ciclo. Questa funzione apre e chiude un socket SMTP per ogni email, il che non è molto efficiente.
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.