(PHP 4, PHP 5)
mail — Invio mail
$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
.
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.
Example #1 Inviare mail.
<?php
mail("[email protected]", "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).
Example #2 Invio di mail con intestazioni supplementari.
<?php
mail("[email protected]", "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.
Example #3 Invio di mail con intestazioni supplementari e impostazione dei parametri addizionali a linea di comando.
<?php
mail("[email protected]", "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.
Example #4 Invio di mail complessa.
<?php
/* destinatari */
$destinatari = "Maria <[email protected]>" . ", " ; // notare la virgola
$destinatari .= "Enrica <[email protected]>";
/* 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 <[email protected]>, Kelly <[email protected]>\r\n";
$intestazioni .= "From: Promemoria Compleanni <[email protected]>\r\n";
$intestazioni .= "Cc: [email protected]\r\n";
$intestazioni .= "Bcc: [email protected]\r\n";
/* ed infine l'invio */
mail($destinatari, $oggetto, $messaggio, $intestazioni);
?>
Nota:
Assicurarsi di non avere nessun carattere di newline nei parametri
a
ooggetto
, o la mail non verrà spedita correttamente.
Nota:
Il parametro
a
non può essere un indirizzo nella forma "Qualcosa <[email protected]>". 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().