Vrifica ESISTENZA ACCOUNT MAIL

venerdì 15 aprile 2011 - 10.48

Brambillone Profilo | Newbie

Buongiorno a tutti, sono nuovo del forum,
vi espongo il mio quesito:
Ho un applicazione che a richiesta invia una serie di mail e fin qui tutto ok.

Il problema è che mi è stato chiesto di dare un elenco di "Log" delle email non inviate per indirizzo non riconosciuto/non corretto.
Gli oggetti che uso sono:
Messaggio mail : System.Net.Mail.MailMessage
Invio mail : System.Net.Mail.SmtpClient

Ho trovato le eccezioni del metodo "Send" della classe System.Net.Mail.SmtpClient
tra le quali c'è System.Net.Mail.SmtpFailedRecipientsException ma sembra che in fase di invio anche se metto l'indirizzo euirghf4857g@dfhgdjf.com questa eccezione non viene scatenata.
In una seconda prova ho inviato la mail ad un account errato sullo stesso provider del server smtp e in questo caso l'eccezione è stata scatenata.
Qualcuno di voi conosce un metodo per poter sapere quali mail vengono rifiutate dal provider o sa darmi una dritta per capire come mai non mi scatena questa eccezione ?
Grazie mille.
Lele

StefanoRicci Profilo | Junior Member

il modo per saperlo per certo è leggere l'errore che viene rispedito al mittente, tramite mail....

il motivo per cui probabilmente sullo stesso provider ti scatena subito l'eccezione è dato dal fatto che l'smtp controlla subito se su se stesso esiste l'account, accade direttamente come errore durante il dialogo del protocollo, quindi da li lo sai subito, al contrario quando invii all'esterno prima la manda poi attende un eventuale risposta negativa, con il solito errore di mail non consegnata per n motivi...
--------------------------------------

IDE: Visual Studio 2008 Professional Edition
IDE: Visual Studio 2010 Express

Brambillone Profilo | Newbie

Grazie mille per la risposta, ma come dovrei fare per attendere un eventuale errore dal provider ? Poi, non esiste un metodo qualsiasi(ancche una chiamata a un servizio web) per sapere se un benedetto indirizzo mail esiste veramente o se è stato scritto male ?
Grazie.
Ciao.

StefanoRicci Profilo | Junior Member

che io sappia non esiste nessun servizio web che garantisce la procedura, ma non l'ho mai cercato, io al volo puoi vedere questo http://www.web-experiments.org/controlla-lesistenza-di-un-indirizzo-email/

il motivo per cui si solito le registrazioni ti obbligano a cliccare il link di verifica è proprio per sapere se esiste o meno l'email cercata...

ma a parte questo quando mandi un email ad un indirizzo errato ti ritorna una risposta da quel server dicendoti che non esiste l'account... altro caso è l'inesisteza del server stesso..

per esempio, mandi due mail:

il mittente: tizio@mioprovider.it

destinatario 1: xsdadfadsfas@gmail.com, ti ritorna l'errore dale server gmail

destinatario 2: prova@asdajsdgajgd.com, non ti torna nulla dal server, visto che evidentemente non esiste, ma dovrebbe tornarti da "mioprovider", un report in cui ti dice che non è riuscito a consegnare....

cmq i report li ricevi nella casella tizio@mioprovider.it, devi solo fare in modo che il software capisa che ci sono problemi

un modo per almeno scartare il caso 2 sarebbe provare a pingare per vedere se a quel dominio corrisponde una macchina, ma a volte alcuni amministratori rimuovono la risposta al ping, oppure una chiamata ad i dns per vedere se esiste il dominio

uno spunto te lo può dare questo software: http://www.tuttoemail.com/h-verifica/verify.html, è a pagamento ma dice alla grossa che processo logico usa per scartare quelli non validi, puoi approfondire la cosa e adattarlo al tuo software



--------------------------------------

IDE: Visual Studio 2008 Professional Edition
IDE: Visual Studio 2010 Express

Brambillone Profilo | Newbie


>
>ma a parte questo quando mandi un email ad un indirizzo errato
>ti ritorna una risposta da quel server dicendoti che non esiste
>l'account... altro caso è l'inesisteza del server stesso..

Anche io mi aspettavo che al mittente della mail fosse notificata la mancata consegna del messaggio ma ho provato e se la mail parte da codice non torna nulla se la mando da outlook invece ricevo correttamente la notifica sull'indirizzo del mittente.


>uno spunto te lo può dare questo software: http://www.tuttoemail.com/h-verifica/verify.html,
>è a pagamento ma dice alla grossa che processo logico usa per
>scartare quelli non validi, puoi approfondire la cosa e adattarlo
>al tuo software

Grazie mille per il link , mi sa che miu devo studiare il modo di interrogare i singoli server smtp per sapere se un indirizzo esiste o no. Se sono riusciti quelli di questo sito perchè non ci dovrei riuscire io ?

StefanoRicci Profilo | Junior Member

la prima parte magari dipende dall'interazione che usi nel software, io con c# uso questo codice e ricevo anche gli errori di risposta

// creazione messaggio MailMessage email = new MailMessage(); email.From = new MailAddress("mittente@gmail.com"); email.To.Add(new MailAddress("destinatario@provider.com")); email.Subject = "oggetto"; email.Body = "body"; // generazioni credenziali di login NetworkCredential SMTPUserInfo = new NetworkCredential("mittente", "passwd"); // allocazione del server SmtpClient mailClient = new SmtpClient("smtp.gmail.com"); mailClient.Port = 587; mailClient.EnableSsl = true; mailClient.Timeout = 20000; mailClient.UseDefaultCredentials = false; mailClient.Credentials = SMTPUserInfo; mailClient.Send(email);
--------------------------------------

IDE: Visual Studio 2008 Professional Edition
IDE: Visual Studio 2010 Express

Brambillone Profilo | Newbie

GRANDISSIMO !!! Ho capito perchè non mi tornavano i messaggi di "rifiuto" .... usavo il server smtp senza credenziali !! Se imposto le credenziali allora mi ritorna il messaggio di mancato recapito, già cosi la cosa mi risolve il problema .

Poi, ho controllato per la restituzione delle Exception , se per ogni indirizzo mail setto come provider quello esatto della mail esempio se l'indirizoz è "tizio@virgilio.it" se istanzio la classe System.Net.Mail.SmtpClient mettendo solo il provider "smtp.virgilio.it" (senza autenticazione) allora mi da subito l'eccezione system.Net.Mail.SmtpFailedRecipientsException ..... ma mi sa che la cosa così non è tanto funzionale è ?!

Ok, comunque con il fatto che mi tornano in dietro le mail non inviate ho risolto il problema. GRAZIE MILLE!!

StefanoRicci Profilo | Junior Member

nessun problema
--------------------------------------

IDE: Visual Studio 2008 Professional Edition
IDE: Visual Studio 2010 Express
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