Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    Newsletter che si blocca durante l'invio

    Ciao ragazzi,
    ho realizzato un sistema di newsletter che recupera gli indirizzi email da database ed effettua l'invio a blocchi di 100.
    Il sistema funziona, però ho notato che se c'è qualche indirizzo email che non funziona, o che è scritto male genera un errore per quel blocco e poi non prosegue più con l'invio.

    In particolare, lì dove trova l'errore esce scritto:
    Errore durante l'invio della posta. in System.Net.Mail.SmtpClient.Send(MailMessage message)

    Poi per tutti i blocchi successivi invece l'errore è il seguente:
    Servizio non disponibile. Chiusura del canale di trasmissione in corso... Risposta del server: smtpcmd03.ad.aruba.it bizsmtp 70kx1m00l2Uiv9R01 policy violation in System.Net.Mail.SmtpConnection.GetConnection(Strin g host, Int32 port) in System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port) in System.Net.Mail.SmtpClient.GetConnection() in System.Net.Mail.SmtpClient.Send(MailMessage message)

    Il codice effettua un controllo di questo tipo sull'email:
    codice:
                
    If MYDR3.HasRows = True Then
                    Do While MYDR3.Read
    
                        If Regex.IsMatch(MYDR3.Item("email_cliente"), "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*") Then
                            Email = MYDR3.Item("email_cliente")
                            myEmail.Bcc.Add(Email)
    
    
                        End If
                    Loop
                End If
    Eppure sembra fregarsene di questo controllo ed andare in errore ugualmente.

    Sapete aiutarmi?
    Grazie mille!!

  2. #2
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Quale è l'email che passa il controllo della Regex e provoca l'errore ?

  3. #3
    e purtroppo non lo so, perché come vedi dal codice invio a blocchi, quindi l'errore lui me lo dà su un blocco di indirizzi email

  4. #4
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Prova a farlo singolarmente cosi vediamo quale è l'email che provoca il danno.

  5. #5
    Facendolo singolarmente non riesco che il provider (Aruba) mi blocchi occupando per molto più tempo il server di posta?

    Gli indirizzi email a cui inviare sono circa 1500

  6. #6
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    Ma credo che alla fine ti dovrebbe bloccare comunque perchè alla fine lato server vengono fatti invii singoli (spero di non aver detto cavolate).

  7. #7
    mmm... lo sai mi pare che in passato Aruba mi mandò proprio una specifica su questo discorso e faceva una distinzione netta fra l'invio di singole email e l'invio di blocchi di email.

    L'ho appena recuperata la risposta di Aruba:
    per l'invio di mail tramite i nostri smtp (tutti richiedono l'autenticazione per l' uso) consigliamo di mantenersi intorno alle 150 mail al minuto e comunque non più di 1500 mail l'ora inserendo per ogni singola mail non più di 100 destinatari

    Vedi che una email con 100 destinatari è vista come singola email e non come 100 email.

  8. #8
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    ciao potresti postare tutto il metodo che si occupa dell'invio?

  9. #9
    Certo, ti scrivo di seguito tutto il codice:


    codice:
            Conn.Open()
    
            Dim MYSQL2 As String
            Dim MYCMD2 As SqlCommand
            Dim Max As Integer
    
            MYSQL2 = "SELECT MAX(mailing_cliente) AS mailing_cliente FROM tab_clienti"
            MYCMD2 = New SqlCommand(MYSQL2, Conn)
    
            Max = MYCMD2.ExecuteScalar
    
            Dim i As Integer
    
    
            For i = 1 To Max
    
                Dim MYSQL3 As String
                Dim MYCMD3 As SqlCommand
                Dim MYDR3 As SqlDataReader
    
                MYSQL3 = "SELECT ID_clienti, email_cliente FROM tab_clienti WHERE mailing_cliente = @mailing_cliente AND elimina_cliente = 0 AND update_cliente = 1 ORDER BY ID_clienti ASC"
                MYCMD3 = New SqlCommand(MYSQL3, Conn)
                MYCMD3.Parameters.Add("mailing_cliente", SqlDbType.Int).Value = i
                MYDR3 = MYCMD3.ExecuteReader
    
                Dim myEmail As New Net.Mail.MailMessage
    
                Dim Email, Email2, Destinatari As String
    
                Destinatari = ""
                Email = ""
                Email2 = ""
    
                myEmail.IsBodyHtml = False
                myEmail.BodyEncoding = System.Text.Encoding.UTF8
                myEmail.From = New MailAddress("mittente", "mittente")
                myEmail.Subject = VarTitolo
    
                If MYDR3.HasRows = True Then
                    Do While MYDR3.Read
    
                        If Regex.IsMatch(MYDR3.Item("email_cliente"), "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*") Then
                            Email = MYDR3.Item("email_cliente")
                            myEmail.Bcc.Add(Email)
    
    
                        End If
                    Loop
                End If
    
                For Each element In myEmail.Bcc
                    Response.Write(element.ToString & "-")
                Next
    
                Response.Write(i & "
    
    ")
                myEmail.Body = "TESTO BODY"
    
                Try
                    
                        Dim mySmtpClient As New System.Net.Mail.SmtpClient
                        mySmtpClient.Timeout = 3000000
                        mySmtpClient.Send(myEmail)
                   
    
                Catch ex As Exception
                    Response.Write(ex.Message & " " & ex.StackTrace)
                End Try
    
    
    
            Next
    
            conn.close()

  10. #10
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    intanto metti subito un blocco finally dopo il catch

    codice:
    Finally
      If TypeOf mySmtpClient  Is IDisposable Then
    	mySmtpClient .Dispose()
      End If
    End Try
    questo dovrebbe risolvere i problemi che hai negli invii successivi al primo errore.

    mentre per controllare la correttezza di un indirizzo email ti consiglio di usare la classe MailMessage invece che la Regex.

    codice:
    Private Function CheckMyEmail(email As String) As Boolean
    	Try
    		Dim mailAddress = New System.Net.Mail.MailAddress(email)
    		If mailAddress IsNot Nothing Then
    			Return True
    		Else
    			Return False
    		End If
    	Catch ex As FormatException
    		Return False
    	End Try
    End Function
    Ho scritto al volo con il traduttore da c# a vb.net spero non ci siano errori, cmq credo che si capisca: la funzione prova a creare un oggetto mailAddress partendo dalla mail che gli passi come argomento, se non ci riesce allora la mail è in un formato sbagliato.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.