posts - 315, comments - 268, trackbacks - 15

My Links

News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro

Tag Cloud

Article Categories

Archives

Post Categories

Blogs amici

Links

System.Net.Mail: Modi diversi di inviare un'e-mail

Spesso si leggono nei forum post  di richiesta su come poter inviare e-mail (con e senza allegati) utilizzando le classi che il Framework .Net  mette a disposizione. Spero che questo piccolo post con relativo codice d'esempio possa tornare utile.

Per inviare una semplice mail di testo senza allegati è sufficiente scrivere:

1 //Mail Plain Text - Senza allegato 2 MailMessage mailMessagePlainText = new MailMessage(); 3 mailMessagePlainText.From = new MailAddress("indirizzo.mittente@dominio.it", "Mittente"); 4 mailMessagePlainText.To.Add (new MailAddress ("destinatario@dominio.it","Destinatario")); 5 mailMessagePlainText.Subject ="Plain Text e-mail"; 6 //mailMessage.CC utilizzare se è necessario inviare in copia carbone 7 mailMessagePlainText.Body ="Questa è una bellissima e-mail, soprattutto utile!";

Se invece volessimo inviare un'e-mail in formato HTML con allegato, possiamo scrivere:

1 //Mail Html - con allegato 2 MailMessage mailMessageHTMLWithAttach = new MailMessage (); 3 mailMessageHTMLWithAttach.From = new MailAddress("indirizzo.mittente@dominio.it", "Mittente"); 4 mailMessageHTMLWithAttach.To.Add (new MailAddress ("indirizzo.destinatario@dominio.it","Destinatario")); 5 mailMessageHTMLWithAttach.Subject = "HTML e-mail"; 6 //mailMessage.CC utilizzare se è necessario inviare in copia carbone 7 mailMessageHTMLWithAttach.Body = "<html><body><h1>Hello World</h1><h2>by e-mail</h2></body></html>"; 8 mailMessageHTMLWithAttach.IsBodyHtml = true; 9 ContentType contType = new ContentType ("text/plain"); 10 mailMessageHTMLWithAttach.Attachments.Add (new Attachment ("Allegato.txt", contType )); 11 //oppure 12 //mailMessageHTMLWithAttach.Attachments.Add(new Attachment("Allegato.txt", MediaTypeNames.Text.Plain)); 13 //o semplicemente 14 //mailMessageHTML.Attachments.Add (new Attachment ("Allegato.txt"));

In questo caso si suppone che il file Allegato.txt si trovi nella stessa directory dell'eseguibile.

Infine se volessimo inviare un'e-mail in formato HTML con allegato, ed un'immagine incorporata nel body HTML, è necessario scrivere qualche riga di codice in più, ma nulla di complicato:

1 //Mail HTML - con immagini incorporate 2 MailMessage mailMessageWithEmbeddedPicture = new MailMessage (); 3 mailMessageWithEmbeddedPicture.From = new MailAddress("indirizzo.mittente@dominio.it", "Mittente"); 4 mailMessageWithEmbeddedPicture.To.Add (new MailAddress ("indirizzo.destinatario@dominio.it","Destinatario")); 5 mailMessageWithEmbeddedPicture.Subject = "HTML e-mail with embedded picture"; 6 7 string htmlBody = "<html><body><h1>Hello World</h1><h2>by e-mail</h2><img src=\"cid:emb1\" /></body></html>"; 8 //Crea un'istanza AlternateView 9 AlternateView altViewHtml = AlternateView.CreateAlternateViewFromString (htmlBody ,null, MediaTypeNames.Text.Html ); 10 //Crea un'istanza LinkedResource 11 LinkedResource embeddedPicture = new LinkedResource("Foto.jpeg", MediaTypeNames.Image.Jpeg); 12 embeddedPicture.ContentId = "emb1"; 13 //Aggiunge l'istanza LinkedResource all'istanza AlternateView 14 altViewHtml.LinkedResources.Add(embeddedPicture); 15 16 //Per i client che non supportano la visualizzazione HTML 17 string warningMessage = "Utilizzare un client di posta che supporta la visualizzazione dei messaggi in HTML"; 18 //Creiamo una nuova istanza di AlternateView 19 AlternateView altViewText = AlternateView.CreateAlternateViewFromString(warningMessage, contType ); 20 21 mailMessageWithEmbeddedPicture.AlternateViews.Add(altViewHtml); 22 mailMessageWithEmbeddedPicture.AlternateViews.Add(altViewText);

In quest'ultimo caso, se si utilizza ad esempio Microsoft Outlook come client di posta elettronica, il risultato sarebbe del tipo:

image

In tutti i tre casi descritti, per inviare il messagio utilizziamo un'istanza della classe System.Net.SmtpClient.

1 SmtpClient smtpClient = new SmtpClient("smtp.dominio.it"); 2

Nel caso in cui il server SMTP richieda l'autenticazione è necessario fornire le credenziali d'accesso mediante istanza della classe System.Net.NetworkCredential. In più se supportata dal server si può  utilizzare SSL:

1 //se è necessario autenticarsi... 2 //smtpClient.Credentials = new System.Net.NetworkCredential("username", "password"); 3 //oppure 4 //smtpClient.Credentials = new System.Net.NetworkCredential("username", "password","dominio"); 5 6 //Se è necessario ed è supportata la cifratura SSL 7 //smtpClient.EnableSsl =true ;

Il codice d'invio (Sincrono) dei messagi di posta è:

1 try 2 { 3 smtpClient.Send(mailMessagePlainText); 4 smtpClient.Send(mailMessageHTMLWithAttach); 5 smtpClient.Send(mailMessageWithEmbeddedPicture); 6 } 7 catch (SmtpException smtpException) 8 { 9 MessageBox.Show(String.Format("SmtpException : {0}", smtpException.Message)); 10 } 11 catch (Exception ex) 12 { 13 MessageBox.Show(string.Format("Exception: {0}", ex.Message)); 14 }

In tutti i casi, per inviare un messagio di posta elettronica utilizzando le classi messe a disposizione dal Framework .Net, utilizziamo un'istanza della classe System.Net.Mail.MailMessage, ed impostando le relative proprietà  possiamo inviare e-mail in formato testo/html con e senza allegati. Interessante è l'utilizzo di istanze delle classe AlternateView per la visualizzazione in diversi formati del messaggio di posta. La proprietà SmtpClient.EnableSsl è stata introdotta con la versione 2.0 del Framework .Net. In allegato al post il progetto d'esempio completo.

Codice: TestMai.zip

 

Print | posted on mercoledì 6 agosto 2008 16:24 | Filed Under [ C# ]

Feedback

Gravatar

# re: System.Net.Mail: Modi diversi di inviare un'e-mail

Esaustivo e ben fatto, complimenti.

Ciao,
.m
06/08/2008 19:31 | Mauro Servienti
Gravatar

# re: System.Net.Mail: Modi diversi di inviare un'e-mail

Ti ringrazio :-).
06/08/2008 19:48 | Pietro Libro
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET