BG personal blog Approfondimenti tecnici sul mondo informatico – By Gabriele Besta

29ott/083

VB.NET – inviare un’email attraverso il Namespace System.Net.Mail con gestione degli errori

A partire dalla versione 2.0 di .NET il Namespace System.Web.Mail è stato rimpiaziato da System.Net.Mail, dedicato interamente all'invio di email e molto più completo ed esteso rispetto al precedente. In questo stralcio di codice mostro come implementare una semplice funzione che consente l'invio di email in formato HTML, con un allegato e in modalità asincrona, così da poter intercettare facilmente eventuali errori. Il codice è ampiamente commentato, in caso di dubbi o problemi non esitate a postare un commento.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Imports System.Net.Mail 'importo il Namespace
Dim mail As MailMessage 'questa dichiarazione deve essere globale
 
'funzione per l'invio di un messaggio email
Private Sub invia_messaggio()
            Try
                mail = New MailMessage()
 
                'definisco i dati del mittente
                Dim mittente As New MailAddress("mittente@boh.it", _
                                                "Nome Mittente")
                mail.From = mittente
 
                'aggiungo un destinatario, copiando questa
                'riga si possono aggiungere destinatari multipli
                mail.To.Add("destinatario@boh.it")
 
                'se si desidera richiedere una notifica di lettura
                'del messaggio decommentare la seguente
                'riga di codice
                'mail.Headers.Add("Disposition-Notification-To", _
                '                 "<mittente@boh.it>")
 
                'definisco l'oggetto del messaggio
                mail.Subject = "Oggetto messaggio"
 
                'definisco la priorità del messaggio
                mail.Priority = Net.Mail.MailPriority.High
 
                'definisco la codifica del corpo del messaggio
                mail.BodyEncoding = System.Text.Encoding.UTF8
                'definisco il messaggio in modalità HTML
                mail.IsBodyHtml = True
                'definisco il corpo del messaggio
                mail.Body = "<html><head></head><body>CIAO</body></html>"
 
                'aggiungo un allegato specificandone il percorso esattto
                mail.Attachments.Add(New Attachment("C:\ciao.txt"))
 
                'definisco l'indirizzo del server SMTP
                Dim smtp As New SmtpClient("smtp.boh.it")
                'definisco i dati per l'autenticazione al server SMTP
                smtp.UseDefaultCredentials = False
                smtp.Credentials = New NetworkCredential("nome utente", _
                                                         "password")
 
                'al termine dell'invio verra richiamata 
                'la funzione invio_completato
                AddHandler smtp.SendCompleted, AddressOf invio_completato
 
                Dim Token As New Object
                'invio il messaggio in modalità asincrona
                smtp.SendAsync(mail, Token)
            Catch ex As SmtpException
                'qui il codice da eseguire in caso di mancanza 
                'di una connessione ad internet
                MsgBox("Nessuna connessione ad internet attiva", _
                        MsgBoxStyle.Exclamation, _
                        "Errore")
                mail.To.Clear()
                mail.Attachments.Clear()
                mail.Dispose()
            End Try
        End Sub
 
'la seguente funzione viene richiamata in ogni caso 
'al termine dell'invio del messaggio
Private Sub invio_completato(ByVal sender As Object, _
                ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
            Dim Token As Object = e.UserState
 
            If e.Cancelled Then
                'l'invio è stato annullato
                Debug.WriteLine("Invio annullato")
            End If
 
            If e.Error IsNot Nothing Then
                'si è verificato un'errore durante l'invio
                Debug.WriteLine("Errore: " & e.Error.ToString)
 
            Else
                'invio completato senza errori
                Debug.WriteLine("Invio completato")
            End If
 
            mail.To.Clear()
            mail.Attachments.Clear()
            mail.Dispose()
        End Sub
Stampa
Commenti (3) Trackback (0)
  1. Grazie è proprio quello che stavo cercando!!!!

  2. Grazie, esempio chiarissimo e utilissimo, mi serviva proprio!!

    E’ possibile ricevere in ritorno un messaggio di conferma che la mail è stata letta?

    Grazie Mille!!
    ciao


Lascia un commento


Ancora nessun trackback.