Articolo scritto da Max Bossi il 29/11/2005
Pagina 1 di 2
A differenza di altri linguaggi di scripting lato server, PHP non offre una metodo intuitivo ed immediato per l'invio di email con allegati. Per questo motivo spesso si fa ricorso a delle apposite classi per gestire con maggior semplicità questa esigenza.
L'utilizzo di classi esterne, seppur comodo, non è indispensabile. Con un poco di pazienza, infatti, possiamo scrivere noi stessi il codice PHP per l'invio di email con allegati (cd:
attachments).
L'allegato, infatti, altro non è che una sorta di "inclusione" di un file all'interno di una mail. Per fare ciò si ricorre al formato
MIME multi-part che consente, appunto, di creare una mail suddivisa in diverse parti.
Nel nostro caso avremo una semplice parte testuale (il messaggio vero e proprio) ed una parte più complessa contenente l'allegato.
In questo articolo vedremo come creare una sorta di formmail evoluto in cui sarà possibile l'aggiunta di file in allegato tramite un semplice modulo html.
La nostra applicazione necessita di due file distinti: un semplice file .html contenente il form ,ed il file .php che svolgerà tutto il lavoro.
Precisamente, il nostro script PHP (che chiameremo
formmail.php) dovrà occuparsi dei seguenti compiti:
- Recupero delle informazioni inserite nel form
- Recupero e verifica del file allegato
- Creazione del messaggio MIME multi-part
- Spedizione della email
Ma per prima cosa vediamo il file .html contenente il form:
<form action="formmail.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="destinatario" value="email@destinatario.com">
<table border="0">
<tr>
<td>Tua Mail:</td>
<td><input type="text" name="mittente" value="" /></td>
</tr>
<tr>
<td>Oggetto:</td>
<td><input type="text" name="oggetto" value="" /></td>
</tr>
<tr>
<td>Messaggio:</td>
<td><textarea cols="20" rows="4" name="messaggio"></textarea></td>
</tr>
<tr>
<td>Allega file:</td>
<td><input type="file" name="allegato" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Invia" /></td>
</tr>
</table>
</form>
Non credo sia il caso di soffermarsi sul codice visto sopra. L'unica cosa degna di nota è l'aggiunta di
enctype="multipart/form-data"
al tag FORM. Questo accorgimento è necessario per la corretta gestione, tramite protocollo HTTP, del file allegato.