Verifica esistenza e-mail

di il
12 risposte

Verifica esistenza e-mail

Buongiorno,
In un mio progetto di fatturazione in VB6, ho previsto un campo [e-mail] che mi permetterà di inviare la copia di cortesia della fattura. Prima dell'invio, però, vorrei controllare che l'indirizzo esiste realmente.
Vi è la possibilità di farlo con un codice che interroghi il server remoto di posta e riceva la risposta dell'esistenza/non esistenza?
Se non è possibile, vi è un codice per il controllo della sintassi dell'indirizzo?
Grazie anticipate a tutti quelli che mi risponderanno.

12 Risposte

  • Re: Verifica esistenza e-mail

    Perche' non provi con il TUO in dirizzo di posta e poi mettendo un utente non esistente / un server non esistente?

    ad esempio:
    (valido)
    (utente non valido)
    (server non valido)

    E vedi che effetto che fa.
    Se il server genera delle eccezioni, se a posto.
    Se non lo fa, ti tocca fidarti.

    Ad aver fatto le cose per bene, l'indirizzo di posta dovrebbe essere gia' stato validato per tempo. Non ha senso rivalidarlo ogni volta.
  • Re: Verifica esistenza e-mail

    MiCo ha scritto:


    Vi è la possibilità di farlo con un codice che interroghi il server remoto di posta e riceva la risposta dell'esistenza/non esistenza?
    Che io sappia, il controllo dell'indirizzo non è ammesso: l'unico modo è tentare di consegnare posta alla casella di posta, ad esempio usando il protocollo SMTP, però questo va fatto contattando direttamente il server che gestisce la casella (quindi se vuoi verificare l'esistenza di una casella @libero.it, non puoi usare l'SMTP di alice.it bensì devi usare direttamente quello di Libero, ovviamente sapendo per ogni provider qual è l'indirizzo del server SMTP dedicato).

    Questo è l'unico modo per ottenere un errore direttamente in fase di consegna: tutti gli altri casi presuppongono che il server SMTP utilizzato, se di provider diverso da quello della casella a cui è destinata la mail, si appoggi al servizio di relay, ossia accetti il messaggio in ingresso come se il destinatario fosse valido, inviando una mail di notifica per "casella non esistente" se riscontra questo problema nel consegnare la posta.

    MiCo ha scritto:


    Se non è possibile, vi è un codice per il controllo della sintassi dell'indirizzo?
    Visto che chiedi codice, non è chiaro perché tu abbia scritto nell'area del Bar dei programmatori, ad ogni modo puoi trovarlo facilmente con una .

    Ciao!
  • Re: Verifica esistenza e-mail

    Grazie per le risposte.

    Quanto al consiglio di Migliorabile:
    1) con la dll che utilizzo, non ricevo alcun errore, quando inserisco un'email inesatta;
    2) non posso validare preventivamente l'indirizzo, per non perdere tempo: la fattura viene emessa alla presenza del cliente sporadico (non inserito in archivio) che fornisce il suo indirizzo di posta, talvolta sbagliato.

    Quanto al consiglio di AlKa, di cercare nel web un codice di controllo della sintassi, assicuro che la ricerca non è per niente banale, perché si trovano decine e decine di pagine, dove tutto si dice fuorché la soluzione che uno si aspetta.
    Nelle mie estenuanti ricerche, l'unico suggerimento degno di nota che ho trovato riguarda le “espressioni regolari” (regular expression), ma mi è sembrato essere un linguaggio da studiare e approfondire. Forse ci perderò del tempo, se qualcuno non mi suggerisce un codice già confezionato.

    Grazie, comunque, per il tempo dedicatomi.
  • Re: Verifica esistenza e-mail

    MiCo ha scritto:


    Quanto al consiglio di AlKa, di cercare nel web un codice di controllo della sintassi, assicuro che la ricerca non è per niente banale [...]
    Te l'avevo già fatta e linkata io nel post.

    MiCo ha scritto:


    perché si trovano decine e decine di pagine, dove tutto si dice fuorché la soluzione che uno si aspetta.
    Difficile da credere. Ci sono decine e decine di pagine perché è una necessità abbastanza diffusa, tutto qui.

    MiCo ha scritto:


    Nelle mie estenuanti ricerche, l'unico suggerimento degno di nota che ho trovato riguarda le “espressioni regolari” (regular expression)
    Infatti, quello è lo strumento da utilizzare per validare l'indirizzo email.

    MiCo ha scritto:


    ma mi è sembrato essere un linguaggio da studiare e approfondire
    Cosa che uno sviluppatore dovrebbe fare naturalmente. Siamo in un forum di programmazione: non è un sito di recruiting o di richiesta per "pappa pronta", come da regolamento.

    MiCo ha scritto:


    Forse ci perderò del tempo, se qualcuno non mi suggerisce un codice già confezionato.
    Non so cosa intendi con "codice già confezionato": chiaramente, non puoi aspettarti qualcosa che balzi dal browser all'interno del tuo programma salvando il file e chiudendo la problematica... un minimo per comprendere e adattare le soluzioni trovate occorre impiegarlo.
  • Re: Verifica esistenza e-mail

    Buona domenica.
    Il tono ironico, che spesso scivola nell'amaro sarcasmo, non aiuta a trovare la soluzione; il più delle volte ferisce e scoraggia. Citando un aforisma di Fabrizio Caramagna, alcune persone sono semplicemente problemi travestiti da soluzione. Ma non mi sono perso d'animo. Così, ho cercato, ho trovato, ho elaborato e intendo mettere a disposizione il risultato a favore di chi sta ancora affrontando il problema.
    Il punto di partenza è stata una funzione (RegExpTest), rinvenuta sul web, che processa una “espressione regolare” (patrn) per il controllo degli indirizzi email, alla quale ho aggiunto una serie di istruzioni per il controllo del suffisso. Il risultato è esplicitato nel seguente esempio (N.B.: per funzionare, selezionare "Progetto\Riferimenti\Microsoft VBScript Regular Expressions 5.5"):

    Function RegExpTest(patrn, strng)
    Dim regEx
    Set regEx = New RegExp
    regEx.Pattern = patrn
    regEx.IgnoreCase = True
    RegExpTest = regEx.Test(strng) 'torna TRUE se la stringa è valida, FALSE in caso contrario
    End Function

    Private Sub Command1_Click()
    patrn = "^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,4}$"
    mail = InputBox("Inserisci indirizzo Email da validare")
    valida = RegExpTest(patrn, mail)
    mes = ""
    If valida = False Then mes = "Indirizzo errato!" & vbCr
    '
    'controlla il suffisso, non essendo validato da RegExp
    c = InStr(mail, "@") 'posizione di @
    p = InStr(c + 1, mail, ".") 'posizione di .
    s = UCase(Right(mail, Len(mail) - p + 1)) 'suffisso
    If s <> ".IT" And _
    s <> ".COM" And _
    s <> ".ORG" And _
    s <> ".EU" And _
    s <> ".NET" Then
    mes = mes & "Suffisso errato!" & vbCr
    End If
    '
    'risultato
    If mes = "" Then mes = "Indirizzo e-mail esatto."
    MsgBox mes
    End Sub
  • Re: Verifica esistenza e-mail

    Ciao,
    la validazione è errata. Ci sono diverse problematiche.
    Prova a validare ad esempio: ""
  • Re: Verifica esistenza e-mail

    Toki ha scritto:


    Ciao,
    la validazione è errata. Ci sono diverse problematiche.
    Prova a validare ad esempio: ""
    Dà errore perché la verifica è effettuata su indirizzi email del tipo: , dove "nomeutente" e "dominio"
    sono costituiti da una sequenza di caratteri alfanumerici, e "suf" da due o tre lettere.
    Invero, l'errore è generato dal suffisso "academy" che è più lungo di tre caratteri, oltre a non essere compreso nelle istruzioni per il controllo del suffisso, ove sono previsti solo IT, COM, ORG, EU e NET.
  • Re: Verifica esistenza e-mail

    Se vuoi la specifica ESATTA di come e' fatto un'indirizzo di posta, si trova qui'

    https://datatracker.ietf.org/doc/html/rfc282

    in particolare
    3.4: Address specification
    3.4.1: Addr-spec specification

    Questa e' la fonte UFFICIALE.
    Un indirizzo di posta puo' essere parecchio complicato:
    
    Dottor Pinco Pallino Medico Chirurgo <dr-pinco.pallino@vatte.la.pesca>
    
    COMUNQUE puoi sempre supportare, come minimo
    
    nomecognome@host.domain
    nome.cognome@host.domain
    
    con la condizione che se qualcuno ti da un indirizzo di posta ""piu' strano"", tu lo devi ""neccessariamente"" accettare.
    Quello che puoi fare e', nel tempo, farti un tuo database di server di posta che sai essere esistenti/validi (Alice, Tim, Google, Yahoo, Poste, ecc) e aggiornarlo di volta in volta che devi inserire un nuovo indirizzo.

    Rimangono TRE problemi:

    1) il fatto che ANCHE SE il server esiste, questo non ti assicura che il nome della casella sia quello giusto: se e' l'indirizzo di un ""extracomunitario"" con un nome strano, potresti scrivere il nome sbagliato.
    2) hai scritto il nome del server sbagliato
    3) ti e' stato dato l'indirizzo sbagliato.

    In ogni caso, per ovviare ai punti 1-3) DEVI prevedere il caso in cui devi "re-inviare" lo stesso documento ad un'altro indirizzo di posta.
  • Re: Verifica esistenza e-mail

    Grazie, Migliorabile, per i preziosi chiarimenti.
    Per le mie necessità, il problema della validazione delle email con suffisso di 2 o 3 caratteri è risolto, riflettendo il 100% degli indirizzi finora incontrati. Indubbiamente, una procedura che controllasse la sintassi in base ad uno standard internazionale sarebbe il massimo, ma, a mio sommesso avviso, i software autoprodotti devono essere significativi nei limiti ristretti delle proprie esigenze, ben lontane da quelle dei programmatori professionisti.
    Non ho trovato alcuna soluzione per verificare l'esistenza delle email, e tu stesso l'hai confermato, ma ho preso spunto, dalle tue precisazioni, per inserire un tasto nel mio progetto che mi consente di re-inviare una precedente fattura, qualora la precedente email non fosse stata ricevuta.
    Di nuovo grazie e buona domenica.
  • Re: Verifica esistenza e-mail

    Dovresti scrivere nella sezione visual basic 6 se proponi codice del genere

    Comunque prova ad usare siti come

    https://email-checker.net
  • Re: Verifica esistenza e-mail

    Giusto:
    esistono diversi siti che fanno validazione delle email, e che si potrebbero usare.
    Uno e' quello fornito da @Oregon, ma ne esistono diversi.
    Basta una ricerca con Google

    Tieni presente che:

    1) OVVIAMENTE non puoi sperare di validare centinaia o migliaia di email al giorno, ""a gratissss".
    Diciamo 5/10 (dipende dal sito). Ma nel tuo caso il numero sembra adeguato
    2) anche se la validazione termina con successo, non e' detto che l'indirizzo sia valido

    I server di posta ""seri"" adottano tutta una serie di strategie per evitare lo spam, assicurarsi che il server non sia usato in modo non consono, ecc. Ad esempio possono accettare qualunque indirizzo di posta e SOLO DOPO un certo tempo (30 minuti, 1 ora, ecc) inviare l'email di indirizzo non valido al mittente.

    Comunque, il tuo codice manca ancora di un sistema di validazione un po' piu' "robusto".
    Anche se il 100% delle mail che hai trattato fino ad ora hanno un dominio a 2/3 caratteri, la Legge di Murphi (ed i suoi corollari) dicono che con probabilita' del 100% ti troverai nel caso in cui il tuo sistema fallira'

    https://www.corsiinrete.it/humor/139
    https://dgpixel.wordpress.com/2014/11/15/le-leggi-di-murphy-informatica/

    Ad esempio, accetterebbe
    
    pinco.pallino@vigilio.it
    
    quando avrebbe dovuto essere
    
    pinco.pallino@vi[r]gilio.it
    
    (mancava la "r")

    Per validare il server, oltre al metodo sopra citato, potresti anche banalmente provare a convertire i seguenti nomi in IP
    (con l'equivalente di "nslookup")
    
    mail.[host].[dom]
    imap.[host].[dom]
    smtp.[host].[dom]
    pop3.[host].[dom]
    www.[host].[dom]
    
    Non e' certo al 100%, ma con elevata probabilita', se esiste un indirizzo di posta, esiste anche uno o piu' dei sudetti siti
    Comunque, potrebbero anche fallire tutti!

    Insomma, ""tutto fa brodo""
  • Re: Verifica esistenza e-mail

    In questo forum si discute sia per trovare soluzioni ma soprattutto per confrontarsi e imparare da chi ha più esperienza.
    Il primo consiglio che mi sento di darti è che quando si realizza del codice bisogna prevedere tutte le possibilità ed è profondamente sbagliato approcciare con "il problema della validazione delle email con suffisso di 2 o 3 caratteri è risolto, riflettendo il 100% degli indirizzi finora incontrati".

    La Validazione formale dell'indirizzo email "leggasi validazione sintassi" si realizza prevedendo tutte le possibilità (o quanto meno la stragrande parte di esse) e non ha nulla a che vedere con il controllo dell'esistenza della mail.
    Sono due cose diverse.

    Una sensata Regular Expression per la validazione formale degli indirizzi email è:
    ^\w+([-+.\']?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$
Devi accedere o registrarti per scrivere nel forum
12 risposte