Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Inviare il contenuto di un form come allegato email

Codice e spiegazione di una funzionalità spesso molto utile
Codice e spiegazione di una funzionalità spesso molto utile
Link copiato negli appunti

Combinando insieme l'uso di alcuni oggetti e funzioni comuni in ASP è possibile inviarevia email il contenuto di una form . Non solo, in questo caso vedremocome inviarla in allegato dopo averne scritto le informazioni in un file di testo.

Se a primo impatto il tutto può sembrarvi complesso niente panico.Come in qualsiasi problema difficile, la prima cosa da fare è suddividereil tutto in semplice step più facili da completare.

Per realizzare il nostro sistema dovremo quindi

  1. Creare una form per inviare i dati
  2. Eseguire un controllo sull'invio della form
  3. Raccogliere le informazioni dalla form
  4. Creare il file di testo
  5. Scrivere le informazioni raccolte nel file
  6. Scrivere l'email
  7. Allegare il file ed inviare l'email
  8. Decidere se mantenere o rimuovere il file

I passi sono volutamente numerosi perché è bene descriveredettagliatamente tutte le operazioni per non perderci per strada, mavedremo come il tutto si riassume in poche righe.

Form di invio

Il primo passo è creare una form di invio . Sono esempiclassici un modulo di contatto o un modulo per preventivi. Nel nostro caso, persemplificare il tutto, creeremo una form con 2 campi di testo ed una textareache conterranno rispettivamente il nome, cognome ed un commento.

<form name="frmEmail" method="post" action="?send=1">
<br />Nome
<br /><input type="text" name="nome" value="" />
<br />Cognome
<br /><input type="text" name="cognome" value="" />
<br />Commento
<br /><textarea name="commento"></textarea>
<br /><input type="submit" name="submit" value="invia" />
</form>

L'action della form, ovvero la pagina di raccolta delle informazioni come è possibilenotare è la stessa della form a cui aggiungiamo per semplificare il controlloun valore in querystring che ci permetta di verificare se dobbiamo inviare ilmodulo o mostrarlo.

Raccolta ed invio dei dati

Il passo successivo è controllare ad inizio pagina se la form è stata inviata . Come detto in precedenza infatti il codice di invio dell'email ed il modulo sono inseriti per comodità nello stesso file.

È quindi necessario far conoscere al webserver quale azione deve intraprendere.

Per far ciò ad inizio pagina eseguiamo un controllo se è presente la variabile in querystring prima definita e se il bottone della form è stato premuto. In caso affermativo procederemo all'invio dell'email, in caso negativo mostreremo il modulo di invio.

Per semplicità possiamo appoggiarci ad una variabile per gestire il controllo. Se la form è stata inviata la variabile conterrà un messaggio di conferma. Nel corpo del file sarà sufficiente controllare la lunghezza di questa variabile. Se maggiore di 0 allora stamperemo il messaggio. Se minore o uguale a 0 sarà mostrare il modulo per permettere all'utente di compilare i campi ed inviarlo.

Riassumento possiamo procedere in questo modo:

if Request.Querystring("send") = 1 AND Len(Request.Form("submit")) > 0
then

' codice per la creazione del file
' scrittura dei contenuti
' ed invio email

' messaggio di conferma
strMessage = "<p>L'email è stata inviata correttamente.<br
/>"
strMessage = strMessage & "Il contenuto della form è stato allegato
all'email.</p>"

end if

' nel corpo del documento eseguiamo il controllo
' se mostrare la conferma o il modulo
' verificando la lunghezza della variabile

if Len(strMessage) > 0 then
Response.Write(strMessage)
else

' mostra la form prima creata

end if
%>

A questo punto abbiamo già completato i passi 1 e 2. Non ci resta che lavorare sul codice di raccolta dei dati dalla form, creazione del file ed invio.

Per richiamare il contenuto dei campi usiamo la solita sintassi Request.Form("nomecampo"):

strNome = Request.Form("nome")
strCognome = Request.Form("cognome")
strCommento = Request.Form("commento")

Ed anche il punto 3 è terminato.

Creazione del file

Ora che sappiamo cosa dovrà contenere il file possiamo procedere conil punto 4. Per poter creare il file è necessario in primo luogo dargliun nome, che assegneremo ad un variabile. Per semplicità in questo esempio generiamo un nome automaticamente ,composto dalla fusione di 3 parti: un prefisso ( emailatt- ), un valoredinamico ricavato dalla data attuale e per finire l'estensione ( .txt ).

La complessità del nome dipende dalla natura del sito. Maggiore l'usoche il sito fa di questo sistema maggiore dovrà essere la complessità delnome creato, per evitare conflitti nella creazione del file.

La complessità diminuisce la probabilità che vengano generaticontemporaneamente due file con lo stesso nome. È poi possibile raffinare ulteriormenteil codice sottostante aggiungendo controlli addizionali sull'esistenza del file.

' Crea il nome
strFile = "emailatt-" &_
Year(Now()) & Month(Now()) & Day(Now()) & "-" & Clng(Timer()) & ".txt"
' Ricava il percorso del file sul server
strFilePath = Server.MapPath(strFile)

Procediamo poi con la creazione del file usando l'oggetto File System Object.

' Crea il file sul server
Set objFso = Server.CreateObject("Scripting.FileSystemObject")
Set objFile = objFso.CreateTextFile(strFilePath, true)

Scrittura del file

Perfetto, siamo a buon punto. Ora sappiamo cosa scrivere (3) e dove scrivere(4), non ci resta che scrivere!

objFile.WriteLine("Email inviata il " & Date() & " alle " & Time())
objFile.WriteLine("IP: " & Request.ServerVariables("REMOTE_ADDR"))
objFile.WriteLine("Client: " & Request.ServerVariables("HTTP_USER_AGENT"))
objFile.WriteLine("Nominativo: " & strNome & " " & strCognome)
objFile.WriteBlankLines(1)
objFile.Writeline(strCommento)
objFile.Close

Mediante il metodo .WriteLine scriviamo la riga di contenuto nel file. Perutilità sono state inserite anche alcune informazioni aggiuntive comel'indirizzo IP dell'utente che ha inviato la form e la user agent del browser.

Non dimentichiamoci prima di proseguire di distruggere gli oggettinon più necessari .

Set objFile = Nothing
Set objFso = Nothing

Invio dell'email

In base all'oggetto email a nostra disposizione sul server procediamo conl'opportuna sintassi. In questo caso come riferimento è stato usato l'oggettoemail CDONTS.

Per semplicità alcune impostazioni sono state definite ad inizio fileusando delle costanti

Const strDestinatario = "indirizzo@email.it"
Const strMittente = "mittente@email.it"
Const strOggetto = "Email inviata tramite form"

Ecco il codice per l'invio:

' Crea l'oggetto CDONTS
Set objMail = Server.CreateObject("CDONTS.NewMail")
with objMail

' Mittente
.From = strMittente
' Destinatario
.To = strDestinatario
' Oggetto
.Subject = strOggetto
' Corpo dell'email
.Body = "Allegato contenuto email."

' Impostazioni
.BodyFormat = 1 ' testo
.MailFormat = 1 ' testo
.Importance = 1 ' normale

' Allegato
.AttachFile strFilePath

' Invia l'email
.Send

end with
Set objMail = Nothing

Particolare rilevanza in questo contesto assume la riga .AttachFilestrFilePath dove il file viene allegato all'email specificandone ilpercorso prima definito.

A questo punto siamo quasi alla fine, o meglio, potremmo già ritenercisoddisfatti, ma completiamo il nostro codice con una piccola operazione di pulizia.

Ad ogni invio della form viene creato un nuovo documento, per poi essere scritto ed allegato. Una volta inviata l'email però questo file viene mantenutosul server a meno di non procedere alla sua rimozione.

Sebbene possa essere utile avere una copia dei file come archivio in alcunicasi questo potrebbe rivelarsi superfluo.

È quindi possibile, al termine dell'esecuzione, rimuovere il filedal server sempre facendo uso del file syste object e della variabilecontenente il nome del file.

Set objFso = Server.CreateObject("Scripting.FileSystemObject")
' controlla la presenza del file ed elimina
if objFso.fileExists(strFilePath) then
objFso.deleteFile(strFilePath)
end if
Set objFso = Nothing

Il nostro codice è concluso! Da ora potrete cominciare a testare il vostro sistema di invio.

Due note finali. Per poter scrivere il file è necessario che nella cartella di destinazione del file siano attivi i permessi di scrittura .

Il codice di invio dell'email in questo esempio fa riferimento all'oggettoCDONTS. Consultare presso il proprio amministratore di rete o provider qualeoggetto è installato sul server prima di procedere e modificare il codicese necessario.

Il codice completo dello script è allegato all'articolo.

Ti consigliamo anche