Descrizione
bool
mail ( string a, string oggetto, string messaggio [, string header_addizionali [, string parametri_addizionali]] )
mail() invia automaticamente il messaggio specificato
in messaggio al destinatario specificato in
a. Destinatari multipli possono essere specificati
mettendo una virgola tra ogni indirizzo in a.
Email con allegati e tipi speciali di
contenuto possono essere spedite usando questa funzione. Questo è
possibile tramite la codifica MIME. Per maggiori informazioni, fare riferimento a
un articolo Zend o alle
Classi Mime del PEAR.
Le seguenti RFC possono essere di aiuto:
RFC 1896,
RFC 2045,
RFC 2046,
RFC 2047,
RFC 2048 e
RFC 2049.
mail() restituisce TRUE se la mail è stata accettata per
la spedizione con successo, altrimenti restituisce FALSE.
Avvertimento |
L'implementazione Windows della funzione mail() differisce sotto molti
aspetti dall'implementazione Unix. Primo, non usa una un programma in locale
per comporre i messaggi, ma opera soltanto direttamente sui socket, il che significa che deve
essere presente in ascolto un MTA su un socket di rete (che può
essere su localhost o su una macchina remota). Secondo, gli header custom
quali From:, Cc:,
Bcc: e Date: non vengono interpretati subito dal
MTA, ma ne viene fatto prima il parsing da parte di PHP.
PHP < 4.3 supportava solo gli header Cc:
(ed era case-sensitive). PHP >= 4.3
supporta tutti gli header e non è più
case-sensitive.
|
Esempio 1. Inviare mail.
<?php mail("pippo@example.com", "Oggetto", "Linea 1\nLinea 2\nLinea 3"); ?>
|
|
Se viene passata come parametro una quarta stringa, questa stringa viene inserita
alla fine dell'intestazione (header). Ciò viene tipicamente usato per aggiungere intestazioni
supplementari. Intestazioni multiple supplementari sono separate da un carattere
di "a capo" (sia newline che carriage return).
Nota:
È necessario usare \r\n per separare le intestazioni,
alcuni mail transfer agent sotto Unix potrebbero funzionare anche solo con un singolo newline
(\n).
Esempio 2. Invio di mail con intestazioni supplementari.
<?php mail("nessuno@example.com", "oggetto", $messaggio, "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n" . "Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n" . "X-Mailer: PHP/" . phpversion()); ?>
|
|
Con il parametro parametri_addizionali
è possibile impostare un parametro addizionale a linea di comando per
il programma configurato per inviare mail usando sendmail_path.
Per esempio si può impostare il corretto valore per envelope sender di
sendmail con l'opzione -f di sendmail. Potrebbe essere necessario aggiungere l'utente che ha in esecuzione il server web
alla configurazione di sendmail per prevenire l'aggiunta
dell'intestazione 'X-Warning' quando si imposta envelope sender
in questo modo.
Esempio 3. Invio di mail con intestazioni supplementari e impostazione dei parametri addizionali a linea di comando.
<?php mail("nessuno@example.com", "oggetto", $messaggio, "From: webmaster@{$_SERVER['SERVER_NAME']}", "-fwebmaster@{$_SERVER['SERVER_NAME']}"); ?>
|
|
Nota:
Questo quinto parametro è stato aggiunto in PHP 4.0.5. A partire da PHP 4.2.3,
questo parametro è disabilitato in modalità safe_mode,
se si cerca di usarlo comunque, la funzione mail() darà un
messaggio di errore e restituirà FALSE.
È possibile costruire messaggi complessi utilizzando la tecnica di
concatenazione delle stringhe.
Esempio 4. Invio di mail complessa.
<?php /* destinatari */ $destinatari = "Maria <maria@example.com>" . ", " ; // notare la virgola $destinatari .= "Enrica <enrica@example.com>";
/* oggetto */ $oggetto = "Promemoria compleanni di Agosto";
/* messaggio */ $messaggio = ' <html> <head> <title>Promemoria compleanni di Agosto</title> </head> <body> <p>Questi sono i compleanni di Agosto!</p> <table> <tr> <th>Persona</th><th>Giorno</th><th>Mese</th><th>Anno</th> </tr> <tr> <td>Walter</td><td>11</td><td>Agosto</td><td>1946</td> </tr> <tr> <td>Sara</td><td>14</td><td>Agosto</td><td>1985</td> </tr> </table> </body> </html> ';
/* Per inviare email in formato HTML, si deve impostare l'intestazione Content-type. */ $intestazioni = "MIME-Version: 1.0\r\n"; $intestazioni .= "Content-type: text/html; charset=iso-8859-1\r\n";
/* intestazioni addizionali */ $intestazioni .= "To: Mary <mary@example.com>, Kelly <kelly@example.com>\r\n"; $intestazioni .= "From: Promemoria Compleanni <compleanni@example.com>\r\n"; $intestazioni .= "Cc: archiviocompleanni@example.com\r\n"; $intestazioni .= "Bcc: controllocompleanni@example.com\r\n";
/* ed infine l'invio */ mail($destinatari, $oggetto, $messaggio, $intestazioni); ?>
|
|
Nota:
Assicurarsi di non avere nessun carattere di newline nei parametri
a o oggetto,
o la mail non verrà spedita correttamente.
Nota:
Il parametro a non può essere un indirizzo nella
forma "Qualcosa <qualcuno@example.com>". Il comando di
mail non sarebbe in grado di effettuare correttamente il parsing mentre dialoga
con il MTA (in particolare sotto Windows).
Vedere anche imap_mail().