Inviare e-mail con VB .net express edition

di il
5 risposte

Inviare e-mail con VB .net express edition

Ciao a tutti,

ho problema con un'applicazione che sto sviluppando con visual basic 2005 express edition.

Praticamente la mia applicazione deve inviare delle email, ma ho notato che queste partono solamente quando chiudo il programma, mentre il programma è in esecuzione queste non partono.

Per sviluppare ciò utilizzo il package System.Net.Mail e il server smtp del mio fornitore adsl (cioè alice).

Qualcuno mi sa dire come mai? E come fare per far si che le email partano anche quando il programma è in esecuzione?

Ringrazio già in anticipo a chi mi darà una mano, ciao

5 Risposte

  • Re: Inviare e-mail con VB .net express edition

    Smanettone ha scritto:


    Ciao a tutti,

    ho problema con un'applicazione che sto sviluppando con visual basic 2005 express edition.

    Praticamente la mia applicazione deve inviare delle email, ma ho notato che queste partono solamente quando chiudo il programma, mentre il programma è in esecuzione queste non partono.

    Per sviluppare ciò utilizzo il package System.Net.Mail e il server smtp del mio fornitore adsl (cioè alice).

    Qualcuno mi sa dire come mai? E come fare per far si che le email partano anche quando il programma è in esecuzione?

    Ringrazio già in anticipo a chi mi darà una mano, ciao
    mandami il programma che lo guardo....
    strano che non ti vadano..
    a me vanno....
    controlla smtp...
    ciao
  • Re: Inviare e-mail con VB .net express edition

    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
  • Re: Inviare e-mail con VB .net express edition

    Smanettone ha scritto:


    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


    ma in quale evento l'h messo il codice?
    non si capisce....
    l'h messo in un bottone?
    mettilo in un evento e vedrai k va....
    se vuoi merkoledì ti kontatto in msn sempre se il kontatto è giusto e ti va....ks mi mandi il progetto o ti mando uno che ho fatto io di esempio...ciao
    bn serata
  • Re: Inviare e-mail con VB .net express edition

    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
    è ovvio che il codice che ti ho postato sia in contenuto in subroutine per la gestione di determinati eventi, solo che non mi sembrava necessario postare tutto il codice, visto che tutto quello che riguarda l'invio dell'email l'ho messo.

    Mi interessa sapere se le istruzioni "nocciolo" per l'invio dell'email sono giuste e ribadisco che le email vengono inviate, ma solo quando chiudo il programma.
    Tutto il resto del codice è a posto.
  • Re: Inviare e-mail con VB .net express edition

    Ho risolto il problema utilizzando in namespace System.Web.Mail al posto di System.Net.Mail, grazie comunque per l'interessamento.
Devi accedere o registrarti per scrivere nel forum
5 risposte