Errore su invio Email su migliaia di utenti

mercoledì 17 ottobre 2012 - 15.47
Tag Elenco Tags  VB.NET  |  .NET 3.5

zseven Profilo | Senior Member

Ciao ragazzi,
una procedura che utilizzo per l'invio delle email per un cliente ha restituito, al cliente stesso, questo errore:

Cassetta postale non disponibile. Risposta del server: 5.1.1 CDPn1k0062Uiv9R01DPuBE iscalinet.it dominio non valido / invalid destination domain

L'errore mi sembra di capire sia dovuto ad un indirizzo email del destinatario che non gli piace.
Io nel codice faccio un controllo sull'email, ma evidentemente ha qualcosa di sbagliato, potete darmi una mano a capire cosa devo correggere?

Come potete vedere dal codice faccio un ciclo for per un numero che ritrovo associato ad ogni cliente.
Ogni 50 utenti raggruppo le email e invio.

L'invio funziona, ma si blocca come vi ho detto ad un certo punto.
Ho provato a cercare sul db le email con un LINK su iscalinet.it, ma trovo due email assolutamente normali che non dovrebbero generare il problema.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

bludev Profilo | Newbie

>Ciao ragazzi,
>una procedura che utilizzo per l'invio delle email per un cliente
>ha restituito, al cliente stesso, questo errore:
>
>Cassetta postale non disponibile. Risposta del server: 5.1.1
>CDPn1k0062Uiv9R01DPuBE iscalinet.it dominio non valido / invalid
>destination domain
>
>L'errore mi sembra di capire sia dovuto ad un indirizzo email
>del destinatario che non gli piace.
>Io nel codice faccio un controllo sull'email, ma evidentemente
>ha qualcosa di sbagliato, potete darmi una mano a capire cosa
>devo correggere?
>
>Come potete vedere dal codice faccio un ciclo for per un numero
>che ritrovo associato ad ogni cliente.
>Ogni 50 utenti raggruppo le email e invio.
>
>L'invio funziona, ma si blocca come vi ho detto ad un certo punto.
>Ho provato a cercare sul db le email con un LINK su iscalinet.it,
>ma trovo due email assolutamente normali che non dovrebbero generare
>il problema.
>
> For i = 1 To Max
>
> Dim MYSQL3 As String
> Dim MYCMD3 As SqlCommand
> Dim MYDR3 As SqlDataReader
>
> MYSQL3 = "QUI SELEZIONO LE EMAIL"
> MYCMD3 = New SqlCommand(MYSQL3, Conn)
> MYDR3 = MYCMD3.ExecuteReader
>
> Dim myEmail As New Net.Mail.MailMessage
>
> Dim Email As String
>
> myEmail.IsBodyHtml = False
> myEmail.BodyEncoding = System.Text.Encoding.UTF8
>myEmail.From = New MailAddress("pippo@pluto.com", "MITTENTE")
> myEmail.Subject = VarTitolo
>
> If MYDR3.HasRows = True Then
> Do While MYDR3.Read
>
>If Regex.IsMatch(MYDR3.Item("EMAIL"), "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")
>Then
> Email = MYDR3.Item("EMAIL")
> myEmail.Bcc.Add(Email)
>
> 'Response.Write(Email & "<br>")
> End If
> Loop
> End If
>
> myEmail.Body = "TESTO"
>
>Dim mySmtpClient As New System.Net.Mail.SmtpClient
> mySmtpClient.Timeout = 3000000
> mySmtpClient.Send(myEmail)
>
>Next

Come dice il messaggio di errore, Il problema è dovuto al fatto che quel dominio (iscalinet.it) non esiste. Non si tratta quindi di un indirizzo mail non corretto, bensì di un probabile errore di battitura (forse si tratta di tiscalinet.it?). Per evitare problemi futuri aggiungi una gestione di errore con un Try Catch.
---
Fabio Turrin - Bludev - http://www.bludev.it/

zseven Profilo | Senior Member

Ciao grazie per la risposta.

Effettivamente dal LIKE che avevo fatto sul db non avevo notato che era scritto solo iscalinet.it.

Volevo però chiederti, come posso fare ad impostare il try cacth sull'istruzione che vedi sopra, per fargli proseguire con l'invio se trova un errore di questo tipo e non far impallare tutta la procedura?

Grazie mille

bludev Profilo | Newbie

Basta inserire nel Try Catch il metodo Send. Purtroppo, siccome tu invii messaggi a blocchi, non hai modo di sapere quale dei 50 destinatari ti ha generato l'errore. L'unica soluzione che mi viene in mente è quella di inviare un messaggio per ogni destinatario.
---
Fabio Turrin - Bludev - http://www.bludev.it/

zseven Profilo | Senior Member

volevo evitare di inviare singolarmente per non avere altri tipi di problemi.

Tu dici che basta una cosa del genere?

Try Dim mySmtpClient As New System.Net.Mail.SmtpClient mySmtpClient.Timeout = 3000000 mySmtpClient.Send(myEmail) Catch ex As Exception End Try

Scusa ma facendo così se trova l'errore non si ferma? Riprende a ciclare?

bludev Profilo | Newbie

Si, è sufficiente. Nel blocco Catch potresti inserire un metodo per aggiungere l'errore a un file di log.
---
Fabio Turrin - Bludev - http://www.bludev.it/

zseven Profilo | Senior Member

Ok Grazie mille! ;)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5