none
Servizio Windows Invio Mail Programmate RRS feed

  • Domanda

  • Ciao ragazzi, ho sviluppato un servizio windows che controlla le date di scadenza in una tabella sql e deve mandare una notifica mail 60gg e 30gg alla scadenza.

    Il servizio funziona correttamente, ma manda solo la prima mail a 60 e non quella a 30.

    Sotto posto il ciclo delle 2 mail nel servizio, prima controllo la scadenza il numero giorni poi per non creare un loop d'invio controllo il campo se ha valore 0 altrimenti se 1 non inviare.

    Come mai la mail successiva a 30 non viene mandta.

    Per cnfermare più rapidamente questo problema ho impostato i range delle scadenze a 3 giorni e 1 e infatti a 3 la mail viene inviata a 1 no.

    Potete  aiutarmi a capire dove stò sbagliando.

    Grazie a tutti.

    Luigi.

    For Each row As DataRow In dt.Rows
                    Dim idScad As Integer = row("idScad").ToString()
                    Dim numstatus As String = row("NUM_STATUS").ToString()
                    Dim ScadDate As Date = row("ScadDate").ToString
                    Dim email As String = row("Email").ToString()
                    Dim Invio1 As Integer = row("Invio1").ToString
                    Dim Invio2 As Integer = row("Invio2").ToString
    
                    Dim dataoggi As Date = Date.Now().ToString
                    Dim scadenza As Integer
    
                    scadenza = DateDiff(DateInterval.Day, dataoggi, ScadDate)
    
    
    
                    WriteToFile("Notifica di scadenza per la polizza numero di status: " & numstatus & " " & email)
    
    
                    Select Case scadenza
                        Case 1
                            If scadenza = "60" Then
                                If Invio1 = "0" Then
                                    Using mm As New MailMessage("aaa@aaa.it", email)
                                        mm.Subject = "ATTENZIONE NOTIFICA DI SCADENZA POLIZZA MANCANO 60 GIORNI"
                                        mm.Body = String.Format("<b>AVVISO DI SCADENZA MANCANO 60 GIORNI.. </b>{0}<br /><br />Avviso di scadenza della polizza con mumero status:", numstatus)
    
                                        mm.IsBodyHtml = True
                                        Dim smtp As New SmtpClient()
                                        smtp.Host = "aaa"
                                        smtp.EnableSsl = True
                                        Dim credentials As New System.Net.NetworkCredential("aaa@aaa.it", "aaa")
                                        smtp.UseDefaultCredentials = True
                                        smtp.Credentials = credentials
                                        smtp.Port = 587
                                        smtp.Send(mm)
                                        WriteToFile("Email di notifica Scadenza a 60 giorni: " & numstatus & " " & email)
                                    End Using
                                End If
                                Dim UpdateInvio As String = "UPDATE TBL_SCADENZE_NO_RINNOVO SET INVIO1 = @INVIO1 WHERE idScad=@idScad"
                                Using con As New SqlConnection(constr)
                                    Using cmdUpdateInvio As New SqlCommand(UpdateInvio)
                                        cmdUpdateInvio.Connection = con
                                        cmdUpdateInvio.Parameters.AddWithValue("@idScad", idScad)
                                        cmdUpdateInvio.Parameters.AddWithValue("@INVIO1", Invio2).Value = "1"
                                        con.Open()
                                        cmdUpdateInvio.ExecuteNonQuery()
                                        con.Close()
                                    End Using
                                End Using
                            End If
                        Case 2
                            If scadenza = "30" Then
                                If Invio2 = "0" Then
                                    Using mm As New MailMessage("aaa@aaa.it", email)
                                        mm.Subject = "ATTENZIONE NOTIFICA DI SCADENZA POLIZZA MANCANO 30 GIORNI"
                                        mm.Body = String.Format("<b>AVVISO DI SCADENZA MANCANO 30 GIORNI. </b>{0}<br /><br />Avviso di scadenza della polizza con mumero status:", numstatus)
    
                                        mm.IsBodyHtml = True
                                        Dim smtp As New SmtpClient()
                                        smtp.Host = "aaa"
                                        smtp.EnableSsl = True
                                        Dim credentials As New System.Net.NetworkCredential("aaa@aaa.it", "aaa")
                                        smtp.UseDefaultCredentials = True
                                        smtp.Credentials = credentials
                                        smtp.Port = 587
                                        smtp.Send(mm)
                                        WriteToFile("Email di notifica Scadenza a 30 giorni: " & numstatus & " " & email)
                                    End Using
                                End If
                                Dim UpdateInvio As String = "UPDATE TBL_SCADENZE_NO_RINNOVO SET INVIO2 = @INVIO2 WHERE idScad=@idScad"
                                Using con As New SqlConnection(constr)
                                    Using cmdUpdateInvio As New SqlCommand(UpdateInvio)
                                        cmdUpdateInvio.Connection = con
                                        cmdUpdateInvio.Parameters.AddWithValue("@idScad", idScad)
                                        cmdUpdateInvio.Parameters.AddWithValue("@INVIO2", Invio1).Value = "1"
                                        con.Open()
                                        cmdUpdateInvio.ExecuteNonQuery()
                                        con.Close()
                                    End Using
                                End Using
                            End If
                    End Select
    
                Next

    venerdì 29 settembre 2017 13:45

Risposte

  • Ciao Paolo,

    ho rivisto il codice ho tolto lo switch Select Case ed ho riordinato i cicli If, ho fatto un test e adesso funziona correttamente.

    Penso che non ho ancora ben capito quando utilizzare Select Case.

    Ciao

    Luigi.

    If scadenza.ToString = "30" Then
                        Dim UpdateInvio30 As String = "UPDATE TBL_SCADENZE_NO_RINNOVO SET INVIO2 = @INVIO2 WHERE idScad=@idScad"
                        Using con As New SqlConnection(constr)
                            Using cmdUpdateInvio30 As New SqlCommand(UpdateInvio30)
                                cmdUpdateInvio30.Connection = con
                                cmdUpdateInvio30.Parameters.AddWithValue("@idScad", idScad)
                                cmdUpdateInvio30.Parameters.AddWithValue("@INVIO2", Invio2).Value = "1"
                                con.Open()
                                cmdUpdateInvio30.ExecuteNonQuery()
                                con.Close()
                            End Using
                        End Using
    
                        Using mm As New MailMessage("", email)
                            mm.Subject = "ATTENZIONE NOTIFICA DI SCADENZA POLIZZA MANCANO 30 GIORNI"
                            mm.Body = String.Format("<b>AVVISO DI SCADENZA MANCANO 30 GIORNI. </b>{0}<br /><br />Avviso di scadenza della polizza con mumero status:", numstatus)
    
                            mm.IsBodyHtml = True
                            Dim smtp As New SmtpClient()
                            smtp.Host = ""
                            smtp.EnableSsl = True
                            Dim credentials As New System.Net.NetworkCredential("", "")
                            smtp.UseDefaultCredentials = True
                            smtp.Credentials = credentials
                            smtp.Port = 587
                            If CInt(Invio2) = "0" Then
                                smtp.Send(mm)
                            End If
                            WriteToFile("Email di notifica Scadenza a 30 giorni: " & numstatus & " " & email)
                        End Using
                    End If
    
    
                    If scadenza.ToString = "60" Then
                        Dim UpdateInvio60 As String = "UPDATE TBL_SCADENZE_NO_RINNOVO SET INVIO1 = @INVIO1 WHERE idScad=@idScad"
                        Using con As New SqlConnection(constr)
                            Using cmdUpdateInvio60 As New SqlCommand(UpdateInvio60)
                                cmdUpdateInvio60.Connection = con
                                cmdUpdateInvio60.Parameters.AddWithValue("@idScad", idScad)
                                cmdUpdateInvio60.Parameters.AddWithValue("@INVIO1", Invio1).Value = "1"
                                con.Open()
                                cmdUpdateInvio60.ExecuteNonQuery()
                                con.Close()
                            End Using
                        End Using
    
                        Using mm As New MailMessage("", email)
                            mm.Subject = "ATTENZIONE NOTIFICA DI SCADENZA POLIZZA MANCANO 60 GIORNI"
                            mm.Body = String.Format("<b>AVVISO DI SCADENZA MANCANO 60 GIORNI.. </b>{0}<br /><br />Avviso di scadenza della polizza con mumero status:", numstatus)
    
                            mm.IsBodyHtml = True
                            Dim smtp As New SmtpClient()
                            smtp.Host = ""
                            smtp.EnableSsl = True
                            Dim credentials As New System.Net.NetworkCredential("", "")
                            smtp.UseDefaultCredentials = True
                            smtp.Credentials = credentials
                            smtp.Port = 587
                            If CInt(Invio1) = "0" Then
                                smtp.Send(mm)
                            End If
                            WriteToFile("Email di notifica Scadenza a 60 giorni: " & numstatus & " " & email)
                        End Using
                    End If

    • Contrassegnato come risposta glider77 mercoledì 4 ottobre 2017 11:24
    lunedì 2 ottobre 2017 14:23

Tutte le risposte

  • Buongiorno Luigi,
    così è difficile sinceramente individuare l'errore, dovremmo almeno costruirci il database leggendo il tuo codice per analizzarlo.
    La cosa migliore in questi casi è mettere dei breakpoint in vari punti e tramite il debug "vedere" se il codice viene eseguito per ognuno di loro.

    Leggendo il tuo codice l'unico punto cui mi domando come possa funzionare è alla variabile scadenza in quanto prima tramite lo switch usi un case cui il suo valore è 1 e poi subito dopo tramite una condizione verifichi se il suo valore è 60.
    In quel caso il suo valore o è 1 oppure 60 e quindi non potrà mai esserci la condizione vera in tutte e due le condizioni.

    Buona giornata,
    ciao

    Paolo Pranzo

    lunedì 2 ottobre 2017 05:48
  • Ciao Paolo,

    ho rivisto il codice ho tolto lo switch Select Case ed ho riordinato i cicli If, ho fatto un test e adesso funziona correttamente.

    Penso che non ho ancora ben capito quando utilizzare Select Case.

    Ciao

    Luigi.

    If scadenza.ToString = "30" Then
                        Dim UpdateInvio30 As String = "UPDATE TBL_SCADENZE_NO_RINNOVO SET INVIO2 = @INVIO2 WHERE idScad=@idScad"
                        Using con As New SqlConnection(constr)
                            Using cmdUpdateInvio30 As New SqlCommand(UpdateInvio30)
                                cmdUpdateInvio30.Connection = con
                                cmdUpdateInvio30.Parameters.AddWithValue("@idScad", idScad)
                                cmdUpdateInvio30.Parameters.AddWithValue("@INVIO2", Invio2).Value = "1"
                                con.Open()
                                cmdUpdateInvio30.ExecuteNonQuery()
                                con.Close()
                            End Using
                        End Using
    
                        Using mm As New MailMessage("", email)
                            mm.Subject = "ATTENZIONE NOTIFICA DI SCADENZA POLIZZA MANCANO 30 GIORNI"
                            mm.Body = String.Format("<b>AVVISO DI SCADENZA MANCANO 30 GIORNI. </b>{0}<br /><br />Avviso di scadenza della polizza con mumero status:", numstatus)
    
                            mm.IsBodyHtml = True
                            Dim smtp As New SmtpClient()
                            smtp.Host = ""
                            smtp.EnableSsl = True
                            Dim credentials As New System.Net.NetworkCredential("", "")
                            smtp.UseDefaultCredentials = True
                            smtp.Credentials = credentials
                            smtp.Port = 587
                            If CInt(Invio2) = "0" Then
                                smtp.Send(mm)
                            End If
                            WriteToFile("Email di notifica Scadenza a 30 giorni: " & numstatus & " " & email)
                        End Using
                    End If
    
    
                    If scadenza.ToString = "60" Then
                        Dim UpdateInvio60 As String = "UPDATE TBL_SCADENZE_NO_RINNOVO SET INVIO1 = @INVIO1 WHERE idScad=@idScad"
                        Using con As New SqlConnection(constr)
                            Using cmdUpdateInvio60 As New SqlCommand(UpdateInvio60)
                                cmdUpdateInvio60.Connection = con
                                cmdUpdateInvio60.Parameters.AddWithValue("@idScad", idScad)
                                cmdUpdateInvio60.Parameters.AddWithValue("@INVIO1", Invio1).Value = "1"
                                con.Open()
                                cmdUpdateInvio60.ExecuteNonQuery()
                                con.Close()
                            End Using
                        End Using
    
                        Using mm As New MailMessage("", email)
                            mm.Subject = "ATTENZIONE NOTIFICA DI SCADENZA POLIZZA MANCANO 60 GIORNI"
                            mm.Body = String.Format("<b>AVVISO DI SCADENZA MANCANO 60 GIORNI.. </b>{0}<br /><br />Avviso di scadenza della polizza con mumero status:", numstatus)
    
                            mm.IsBodyHtml = True
                            Dim smtp As New SmtpClient()
                            smtp.Host = ""
                            smtp.EnableSsl = True
                            Dim credentials As New System.Net.NetworkCredential("", "")
                            smtp.UseDefaultCredentials = True
                            smtp.Credentials = credentials
                            smtp.Port = 587
                            If CInt(Invio1) = "0" Then
                                smtp.Send(mm)
                            End If
                            WriteToFile("Email di notifica Scadenza a 60 giorni: " & numstatus & " " & email)
                        End Using
                    End If

    • Contrassegnato come risposta glider77 mercoledì 4 ottobre 2017 11:24
    lunedì 2 ottobre 2017 14:23