Ti posto la parte di codice che gestisce l'invio dell'email, in particolare, questo è un estratto del programma in cui mando delle email a tutti i contatti registrati nel database
Dim client As New SmtpClient("out.alice.it")
Dim qryAllContacts As String
Dim qryContatti As String
Dim i As Integer
Dim mailmsg As MailMessage
Dim autore As MailAddress
Dim dest As MailAddress
Dim dtTutti As New Data.DataTable
qryAllContacts = "select id_contatto, email1 from tblContatti order by email1;"
'esecuzione query sql
comandoSql = New OleDbCommand(qryAllContacts, mdiMain.conn)
'assegno al dataAdapter l'oggetto command da eseguire
adp.SelectCommand = comandoSql
'eseguo il metodo Fill che popola il datatable eseguendo l'oggetto command (comandoSql) assegnato
dtTutti.Clear()
adp.Fill(dtTutti)
If (dtTutti.Rows.Count = 0) Then
MsgBox("Non ci sono contatti registrati", MsgBoxStyle.Critical, "CONTATTI NON PRESENTI")
Exit Sub
End If
autore = New MailAddress(txtMittente.Text, txtAlias.Text)
mailmsg = New MailMessage
With mailmsg
'Assegna agli elementi del messaggio ciò che è stato specificato nel form
'oltre all'autore del messaggio, istanziato precedentemente
.Subject = txtOggetto.Text
.Sender = autore
.IsBodyHtml = True
.Body = "<html><body>" & rtxtTesto.Text & "</body></html>"
.From = autore
.ReplyTo = autore
.Priority = MailPriority.Normal
'Specifica quale messaggio di notifica deve essere inviato al mittente
'In questo caso solo se l'invio del messaggio fallisce.
.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure
End With
i = 0
Do While (i < dtTutti.Rows.Count)
dest = New MailAddress(dtTutti.Rows(i).Item(1).ToString)
mailmsg.To.Clear()
mailmsg.To.Add(dest)
Try
client.Send(mailmsg)
'salvataggio nel database dell'email inviata
Dim sql_insert As String
qryContatti = "select * from tblMessaggi where codiceContatto = " & dtTutti.Rows(i).Item(0) & " and dataInvio = #" & Today.Date & "#;"
'esecuzione query sql
comandoSql = New OleDbCommand(qryContatti, mdiMain.conn)
'assegno al dataAdapter l'oggetto command da eseguire
adp.SelectCommand = comandoSql
'eseguo il metodo Fill che popola il datatable eseguendo l'oggetto command (comandoSql) assegnato
Dim dtMessaggi As New Data.DataTable
adp.Fill(dtMessaggi)
Dim num_messaggi As Integer
num_messaggi = dtMessaggi.Rows.Count + 1
sql_insert = "insert into tblMessaggi values(" & dtTutti.Rows(i).Item(0) & ",#" & Today.Date & "#," & num_messaggi & ",'i','" & Trim(rtxtTesto.Text) & "');"
'esecuzione query sql
comandoSql = New OleDbCommand(sql_insert, mdiMain.conn)
comandoSql.ExecuteNonQuery()
i = i + 1
If (i = dtTutti.Rows.Count) Then
MsgBox("Le e-mail sono state inviate con successo!!", MsgBoxStyle.Information, "INVIO AVVENUTO")
If (rdbData.Checked = True) Then
Call ordina_data()
Else
Call ordina_categoria()
End If
Call pulisci()
End If
Catch ex As InvalidOperationException
MsgBox("Non è stato specificato il nome Host del server", MsgBoxStyle.Critical, "ERRORE")
Catch ex As SmtpFailedRecipientException
MsgBox("Tentativo di invio al server locale, ma non è presente una mailbox", MsgBoxStyle.Critical, "ERRORE")
Catch ex As SmtpException
MsgBox("Utente non valido/Host non trovato/Altro errore in fase di invio", MsgBoxStyle.Critical, "ERRORE")
Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.Critical, "ERRORE")
End Try
Loop
grazie per l'aiuto