Supporto Live

Creare un modulo FormMail

Home » Articoli tecnici » Creare un modulo FormMail

Un modulo per raccolta dati e invio per posta elettronica, comunemente detto FormMail, è il mezzo più semplice e immediato per facilitare le comunicazioni tra voi e i vostri utenti, sfruttando il vostro sito web.

E’ possibile creare un modulo FormMail per consentire quindi ai vostri visitatori di richiedervi un preventivo, inviare un commento o semplicemente per iniziare un contatto.

Lo spazio web Loginstudio supporta il modulo FormMail in Asp.Net che è possibile creare con i passaggi seguenti.
Nota. Gli utenti registrati possono inoltre scaricare, dalla loro area riservata, uno script alternativo per la creazione di svariati FormMail.

Per seguire i passaggi seguenti è sufficiente utilizzare un`applicazione di tipo notepad e un client per la pubblicazione via FTP (fai clic qui per leggere l’articolo sulla Pubblicazione del sito via FTP).

CREAZIONE DEL MODULO FORMMAIL PER RICHIESTA INFORMAZIONI

Passaggio1
Lanciate l’applicazione notepad (es. Blocco note di Windows).

Passaggio2
Copiate e incollate sul notepad il codice seguente (Xhtml, Asp.Net, C#).

<%@ Page Language="C#" Debug="true"%>
<%@ Import Namespace="System.Web.Mail" %>

<script runat="server">

//invia_click è la funzione che raccoglie le informazioni del modulo e invia il messaggio
//la funzione verrà chiamata alla pressione del tasto "Invia modulo" (evento onclick)
void invia_click(object sender, EventArgs e){

       if (Page.IsValid == true){ //convalida lato server
      
              //impostiamo la variabile che contiene l’indirizzo email del destinatario
              string email_destinatario = "tuacasella@tuodominio.x";
      
              //creiamo un oggetto MailMessage
              MailMessage mail = new MailMessage();
            
              //impostiamo i parametri per il server smtp
              mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1) ;
              mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "email@tuodominio.x") ;
              mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "password_Email") ;
              mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", "mail.tuodominio.x");
              mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25);
              mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2);

               //impostiamo gli indirizzi mittente e destinazione e l’oggetto del messaggio
              mail.From = Email.Value;
              mail.To = email_destinatario;
              mail.Subject = "Richiesta informazioni e contatti";

              //inizializziamo la variabile che conterrà il testo html del messaggio
              string corpo_messaggio;
            
              //riempiamo la variabile con un html generato dinamicamente
              corpo_messaggio = "Nome: " + Nome.Value + "<br>";
              corpo_messaggio += "Cognome: " + Cognome.Value + "<br>";
              corpo_messaggio += "Email: " + Email.Value + "<br>";
              corpo_messaggio += "Messaggio: " + Messaggio.Value + "<br>";
              corpo_messaggio += "<hr>";

              //impostiamo il formato, la codifica e infine inviamo il messaggio
              mail.BodyFormat = MailFormat.Html;
              mail.Body = corpo_messaggio;
              mail.BodyEncoding = System.Text.Encoding.GetEncoding("iso-8859-15");
              SmtpMail.Send(mail);
            
              //nascondiamo il formmail e visualizziamo il testo di conferma tramite in controllo server  label (lbl_messaggio)
              formmail.Visible = false;
              lbl_messaggio.Text = "Gentile " + Nome.Value + ",<br/>il modulo è stato inviato correttamente.";
       }
      
}

</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
       <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
       <title>Richiesta informazioni e contatti</title>
</head>
<body>
       <asp:Label id="lbl_messaggio" runat="server"></asp:Label>
       <form runat="server" name="formmail" id="formmail">
              <table border="0" cellpadding="4" cellspacing="0">
                    <tr>
                           <td align="left" colspan="2">
                                 <h1>
                                        Richiesta informazioni e contatti</h1>
                           </td>
                    </tr>
                    <tr>
                           <td align="right">
                           </td>
                           <td align="left">
                                 (*) = campi obbligatori</td>
                    </tr>
                    <tr>
                           <td align="right">
                                 <!-- Il campo nome, come anche gli altri campi contengono dei tag Asp.Net di tipo RequiredFieldValidator per la convalida lato server -->
                                 Nome*<asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ControlToValidate="Nome"
                                        Display="Dynamic" EnableClientScript="True" ErrorMessage="<br>Campo obbligatorio!"
                                        SetFocusOnError="True"></asp:RequiredFieldValidator></td>
                           <td align="left">
                                 <input id="Nome" runat="server" maxlength="255" type="text" size="30" /></td>
                    </tr>
                    <tr>
                           <td align="right">
                                 Cognome*<asp:RequiredFieldValidator id="RequiredFieldValidator4" runat="server" ControlToValidate="Cognome"
                                        Display="Dynamic" EnableClientScript="True" ErrorMessage="<br>Campo obbligatorio!"
                                        SetFocusOnError="True"></asp:RequiredFieldValidator></td>
                           <td align="left">
                                 <input id="Cognome" runat="server" maxlength="255" type="text" size="30" /></td>
                     </tr>
                    <tr>
                           <td align="right">
                                 Email*<asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server" ControlToValidate="Email"
                                        Display="Dynamic" EnableClientScript="True" ErrorMessage="<br>Campo obbligatorio!"
                                        SetFocusOnError="True"></asp:RequiredFieldValidator><asp:RegularExpressionValidator
                                              id="RegularExpressionValidator1" runat="server" ControlToValidate="Email" Display="Dynamic"
                                              ErrorMessage="Email non valida!" ValidationExpression="w+([-+.’]w+)*@w+([-.]w+)*.w+([-.]w+)*"></asp:RegularExpressionValidator></td>
                           <td colspan="1" align="left">
                                 <input type="text" id="Email" maxlength="255" runat="server" size="30" />
                           </td>
                    </tr>
                    <tr>
                           <td align="right">
                                 <!-- Il campo nome, come anche gli altri campi contengono dei tag Asp.Net di tipo RequiredFieldValidator per la convalida lato server -->
                                 Messaggio*<asp:RequiredFieldValidator id="RequiredFieldValidator3" runat="server"
                                        ControlToValidate="Messaggio" Display="Dynamic" EnableClientScript="True" ErrorMessage="<br>Campo obbligatorio!"
                                        SetFocusOnError="True"></asp:RequiredFieldValidator></td>
                           <td align="left">
                                 <textarea id="Messaggio" runat="server" cols="30" rows="3"></textarea>
                           </td>
                    </tr>
                    <tr>
                           <td align="left" bgcolor="#ebebeb" colspan="2">
                           </td>
                    </tr>
                    <tr>
                           <td align="left">
                           </td>
                           <td align="left">
                                 <!-- Il pulsante invio contiene la proprietà "onserverclick" che richiama la funzione "invia_click" alla pressione del mouse -->
                                 <input name="Submit" type="submit" id="Submit" value="Invia modulo" runat="server"
                                        onserverclick="invia_click" /></td>
                    </tr>
              </table>
       </form>
</body>
</html>

Passaggio 3
Salvate il file con il nome formmail.aspx e pubblicatelo nella directory principale del vostro spazio web (o in una sottocartella).

Passaggio 4
Chiamate il file con un browser tramite l’indirizzo http://www.dominio.x/formmail.aspx

ANALISI DEL CODICE SCRIPT LATO SERVER

<%@ Page Language="C#" Debug="true"%>

Nella prima riga è specificata la direttiva Page nella quale è specificato il linguaggio in uso (C#) ed eventuali altre proprietà (es. Debug, il quale consente la visualizzazione completa di eventuali messaggi di errore in modo da facilitare la localizzazione e rimozione di errori nel codice).

<%@ Import Namespace="System.Web.Mail" %>

La seconda riga è una direttiva Asp.Net per l’importazione del Namespace System.Web.Mail. Un Namespace è come un contenitore di classi con le quali è possibile istanziare oggetti, in questo caso utili alla preparazione e all’invio del messaggio.

void invia_click(object sender, EventArgs e){...}

All’interno del tag <script...>...</script> è contenuta l’unica funzione invia_click all’interno della quale vengono recuperati i valori specificati dall’utente e inviato il messaggio.

//impostiamo i parametri per il server smtp
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1) ;
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "email@tuodominio.x") ;
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "password_Email") ;
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", "mail.tuodominio.x");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25);
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2);

Un aspetto molto importante per il buon funzionamento di un formmail è l’impostazione dei parametri SMTP preposti alla localizzazione del server SMTP e ad eventuali altre credenziali.

corpo_messaggio = "Nome: " + Nome.Value + "<br>";
corpo_messaggio += "Cognome: " + Cognome.Value + "<br>";

In Asp.Net i valori dei campi di Input possono essere recuperati, nel codice lato server, in modo analogo a quanto avviene con le applicazioni di tipo desktop o locali. E’ sufficiente infatti richiamare il campo seguito dal un punto e dalla proprità Value (in taluni casi la proprietà da richiamare è Text).
Seguendo questo paradigma potete ampliare il formmail aggiungendo nuovi campi (indirizzo, città, telefono, etc..) senza alcuna limitazione.

ANALISI DEL CODICE HTML

Il codice html contiene, tra le altre cose, i campi di input del formmail (ogni campo ha proprietà runat=server per consentire il recupero dei valori in fase di esecuzione lato server) e i validator Asp.Net.

<tr>
<td align="right">
<!-- Il campo nome, come anche gli altri campi contengono dei tag Asp.Net di tipo RequiredFieldValidator per la convalida lato server -->
Nome*<asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ControlToValidate="Nome"
Display="Dynamic" EnableClientScript="True" ErrorMessage="<br>Campo obbligatorio!"
SetFocusOnError="True"></asp:RequiredFieldValidator></td>
<td align="left">
<input id="Nome" runat="server" maxlength="255" type="text" size="30" /></td>
</tr>

Il motore ASP.Net, in fase di esecuzione elabora i tag validator e genera l’opportuno codice javascript per il controllo del testo inserito all’interno dei campi.
Sono disponibili diverse tipologie di Validator con funzioni specifiche oppure personalizzabili.
Per approfondimenti si consiglia lo studio di Asp.Net.

Pagine correlate: Parametri SMTP per invio email da sito web


Autore: Antonio Di Dia
Ultimo aggiornamento: 16/02/2008

Scarica allegato | Stampa pagina | Social Bookmark Oknotizie del.icio.us


Home | Registrazione Dominio | Scegliere Loginstudio | Istruzioni | Chi siamo | Assistenza tecnica | Glossario dei termini |
Piani di Hosting | Contattaci | Privacy | Condizioni del servizio | Preferiti | Progetti