Form inviati per email con CDOSYS

Form inviati per email con CDOSYS

Una delle caratteristiche più utili di un sito dinamico è poter interagire con l'utente e uno dei modi per farlo è usare dei form che possono servire per una miriade di motivi: richiedere iscrizioni alle directory, ad un sito per evere accesso a settori ristretti, sondaggi o quant'altro. In ogni caso quello che fa l'utente è compilare un form e inviarlo, e gli script che seguono servono per raccogliere i dati inviati dal form in una email che viene spedita ad un indirizzo mentre si rilascia un messaggio di ringraziamento.

Abbiamo due pagine: la prima è semplicemente un form di default con vari tipi di opzioni, campi di testo, menu a tendina, ecc, che possono essere così variati a piacere, con due soli campi obbligatori , la seconda è la pagina da cui si spedisce la mail che contiene i dati raccolti dal form e che costruisce una pagina di ringraziamento. Si fa notare che questa pagina utilizza le specifiche di CDOSYS che vanno utilizzate obbligatoriamente per poter inviare email da server con IIS 6 che si trova su Windows Server 2003. Le specifiche che si usavano prima di IIS 6 erano CDONTS ma ora è caduto in disuso e tutti i form che usavano quelle specifiche non funzionano più.

Vediamo nel dettaglio la prima pagina: si chiama Form.asp e per averne una visione d'insieme puoi cliccare qui (per scaricare tutte le pagine guarda in fondo alla pagina, ci troverai il link apposito)

Vediamone i tratti interessanti:

Nell'head della pagina troviamo il codice javascript che da l'obbligatorietà dei due campi che sul form sono segnalati da due asterischi rossi.

Per aggiungere altri campi obbligatori basta aggiungere nuove righe di script col nome del campo obbligatorio. Se il campo non viene riempito si apre una finestra alert che invita a riempire il relativo campo e chiudendo la finestra il focus ritorna sul campo in questione.

<Head>

<script>
function controlla(form){
if (form.nome.value.length<2){
alert("Inserire il nome per favore!");
form.nome.focus();
return false;
}
if (form.email.value.length<2){
alert("Inserire un indirizzo mail valido per favore!");
form.email.focus();
return false;
}

}
</script>

</head>.

ora vediamo l'inizio del form che utilizza il metodo post e attiva la funzione javascript che controlla la obbligatorietà dei due campi

<FORM ACTION="manda_feedback.asp" METHOD="post" onSubmit="return controlla(this)">
...........
<tr>
<td> <input type="text"... name="nome"></td>
</tr>
<tr>
<td> <input type="text"..... name="email"></td>
</tr>

Questi sono gli unici due campi che è bene siano obbligatori: il campo nome lo deve essere per forza altrimenti la mail non può partire (fa parte delle specifiche obbligatorie di CDOSYS), il campo mail è bene che ci sia per sapere a chi spedire la mail, ma questo dipende da cosa ne vuole fare del form.

Passiamo ora alla seconda pagina: si chiama manda_feedback.asp e raccoglie i dati in modo automatico, ovverosia, tranne che per il campo nome e per quello email tutti gli altri sono riconosciuti in modo automatico permettendo così di cambiare a volontà la pagina del form senza dover toccare questa tutte le volte.

Vediamo il dettaglio delle parti interessanti:

vediamo la procedura che gestisce la costruzione di una pagina html di ringraziamento: può essere personalizzata come si vuole e compare quando l'invio del form è andato a buon fine:

Sub pag_ritorno(nome)
response.write "<br>"
response.write "<div align='center'>"
response.write "Grazie " & nome & "di aver riempito il form"
response.write "<br><a href='Javascript:history.go(-2)'>torna indietro</a>"
response.write "</div>"
End sub

la parte di codice chiamata manda_posta è quella che si occupa di tutta la parte complicata, vediamo bene:

Sub manda_posta(form)

..............

le variabili che seguono raccolgono dati sull'invio, se non servono possono essere anche eliminate:

nomeDominio = Request.ServerVariables("HTTP_HOST")
indirizzoIp = Request.ServerVariables("REMOTE_ADDR")
modulo = Request.ServerVariables("HTTP_REFERER")
browserSistemaOperativo = Request.ServerVariables("HTTP_USER_AGENT")

Le variabili seguenti raccolgono i dati dal campo nome e email, 'se mi serve una mail che spedisca i dati a me, qui posso metterci il mio indirizzo di posta, non quello raccolto del campo


email = Request.Form("email")
nome = Request.Form("nome")

Il ciclo for è quello che legge in modo automatico i contenuti dei vari campi

FOR numeroCampi = 1 TO (Request.Form.Count() - 1)
IF NOT Request.Form(numeroCampi) = "" THEN
corpotesto = corpotesto & "<br>" & Request.Form.Key(numeroCampi) & " = " & Trim(Request.Form(numeroCampi))
END IF
NEXT
Ora vediamo le impostazioni che ci consentono di spedire la mail usando CDOSYS:

Dim mail, Flds, iConf

Set mail = Server.CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields

Flds(cdoSendUsingMethod) = cdoSendUsingPort
Flds(cdoSMTPServer) = "smtp.aruba.it"
Flds(cdoSMTPServerPort) = 25
Flds(cdoSMTPAuthenticate) = cdoAnonymous ' 0
Flds.Update

With mail
Set .Configuration = iConf
.From = nome 'mettere il mittente
.To = email 'mettere il destinatario
.Sender = "aaa@ansorweb.it" 'è obbligatorioinserirlo altrimenti la mail non parte
.Subject = "ritorno dal form" 'inserire una stringa a scelta
.HtmlBody = "Questi sono i dati inseriti nel modulo proveniente da: " & modulo & " <br>da utente con indirizzo IP: " & indirizzoIp & " <br> browser e sistema operativo:" & browserSistemaOperativo & "<br>" & corpotesto
.Send
End With

Osserviamo che al posto di .htmlbody posso mettere .txtbody e inserire come valore una stringa, ma con htmlbody ottengo la formattazione html, decisamente più gradevole

E' tutto, non resta altro da fare che scaricare i file per avere i testi completi da poter usare a volontà.

clicca qui per scaricare le pagine dell'esempio

Ultima revisione pagina: 2019-05-28