Inviare email con Asp.NET: il Namespace System.Web.Mail

Siti dinamici con ASP.NET
Impara a creare siti ed applicazioni Web con Microsoft .NET

Scritto da Luca Ruggiero nella sezione Asp.NET

Utilizzeremo questo Articolo sia per analizzare in maniera pressocchè completa il Namespace (o classe) System.Web.Mail, sia per preparare un piccolo form-mail semplicemente adattabile alle più comuni esigenze degli sviluppatori. Il funzionamento di quest'applicazione non è particolarmente differente dall'utilizzo dell'ormai famosa libreria CDONTS con Asp tradizionale: viene infatti generata un'istanza dell'oggetto CDOSYS, creato per IIS6, per quanto retroattivamente compatibile.

Creiamo una pagina completa di esempio in cui abbiamo un modulo al cui invio i dati vengono elaborati e viene inviata una mail: il file email.aspx; presento il codice completo e commentato:

<%@page language="C#"%>
<%@ Import Namespace="System.Web.Mail" %>

<script language="C#" runat="server">
    public void Invia(Object Obj, EventArgs e)
    {
        MailMessage EMAIL = new MailMessage();

        EMAIL.From = mittente.Text;
        EMAIL.To = destinatario.Text;
        EMAIL.Subject = oggetto.Text;
        EMAIL.Body = messaggio.Text;

        try
        {
            SmtpMail.Send(EMAIL);
            Messaggio.Text = "Messaggio inviato";
        }
        catch (Exception Ex)
        {
            Messaggio.Text = "Errore nell'invio: " + Ex.Message;
        }
}
</script>

<form id="modulo" name="modulo" method="POST" action="email.aspx" runat="server">
    Destinatario<br>
    <asp:Textbox id="destinatario" value="lucaruggiero@email.it" runat="server" /><br>
    Mittente<br>
    <asp:Textbox id="mittente" runat="server" /><br>
    Oggetto<br>
    <asp:Textbox id="oggetto" runat="server" /><br>
    Messaggio<br>
    <asp:Textbox TextMode="multiline" id="messaggio" Rows="10" Cols="50" runat="server" /><br>
    <asp:Button id="Send" Text="Invia" onClick="Invia" runat="server" />
</form>

<asp:Label id="Messaggio" runat="server" />
Vediamo di fare luce sul codice appena presentato, implementato in C#. Iniziamo proprio dal codice Asp.NET che provvede all'elaborazione ed all'invio dei dati; restano invariate proprietà standard From, To, Subject e Body, a cui è necessario associare la proprietà Text per trattare il dato come stringa.

Espletata questa operazione di incapsulamento dei dati, possiamo passare alla loro elaborazione ed invio. E' opzionale (ma consigliata) la gestione degli errori col costrutto try...catch; utilizziamo il metodo SmtpMail.Send() per inviare la mail ed impostiamo un messaggio di conferma; in caso di errore, avvisiamo l'utente del deprecabile quanto involontario errore, utilizzando la proprietà Ex.Message (eccezione.messaggio) per fornire una spiegazione maggiormente dettagliata.

Per la realizzazione del modulo ho utilizzato gli Html Controls, ovvero oggetti client messi a disposizione da Asp.NET per la gestione di alcune componenti della pagina Html: conto di dedicare a breve un Articolo a questi elementi. Il risultato Html non è altro che un normalissimo modulo. Faccio solo una piccola anticipazione: abbiamo notato sul pulsante di invio l'evento onClick; siamo abituati con Javascript ad associare una funzione o una routine lato client ad un evento; essendo Asp.NET un linguaggio ad eventi oltre che ad oggetti, è possibile associare all'evento di un elemento una funzione lato server!

Gli elementi che caratterizzano una mail, come abbiamo appreso con CDONTS, non finiscono qui: abbiamo la possibilità di inviare allegati, di impostare la priorità della missiva, di formattare il corpo in Html, e così via. Esaminiamo queste altre caratteristiche.

BodyFormat permette di formattare la mail in Html:
EMAIL.BodyFormat = MailFormat.Html;
BodyEncoding permette di codificare il formato della mail in base N, nell'esempio di codice in base 64 bit:
EMAIL.BodyEncoding = MailFormat.Base64;
Priority stabilisce la priorità della mail; i suoi valori sono gli stessi utilizzati in CDONTS:
EMAIL.Priority = MailPriority.High; // ALTA PRIORITA'
Attachments.Add include in allegato un file:

EMAIL.Attachments.Add(new MailAttachment("c:\nomefile.ext"));
Ricordo che un file deve essere presente sul server per essere inviato come allegato, ed in caso contrario deve essere prima uploadato.

SmtpMail.SmtpServer imposta l'indirizzo di un server SMTP da utilizzare, in caso il server non ne abbia uno già a disposizione o settato:
SmtpMail.SmtpServer = "smtp.provider.ext";

I più cliccati della sezione Asp.NET

:: Guida base ad Asp.NET (56.697)

:: I Validation Controls di Asp.NET (29.060)

:: Utilizzo delle QueryString con Asp.NET e C Sharp (23.369)

:: Visualizzare i record di un database Access con Asp.NET (20.956)

:: Un Guestbook in ASP.NET, Access e ADO (18.571)

:: Gestione delle News in ASP.NET (13.313)

:: Una Newsletter in ASP.NET (11.977)

:: Inserire dati in un database Access con Asp.NET (11.605)

:: Upload di file in Asp.NET e Javascript (11.322)

:: Risolvere un indirizzo IP ed individuare nome macchina e dominio in Asp.NET (9.972)

IN EVIDENZA
DOWNLOAD