realbasic-nug.it
[Top] [All Lists]

Re: Email Address Validation ecco un servizio disponibile

To: REALbasic NUG Italian <realbasic-nug dot it at lists dot realsoftware dot com>
Subject: Re: Email Address Validation ecco un servizio disponibile
From: Matteo Cortonesi <m_cortonesi at ticino dot com>
Date: Tue, 14 Mar 2006 10:26:30 +0100
Delivered-to: realbasic-nug dot it at lists dot realsoftware dot com
References: <208BECCB-5E69-47B3-A71E-D4099BB2D881 at libero dot it>
Nel file che ti avevo mandato faceva esattamente la stessa cosa, ma con meno comandi.

Ora cerco di spiegarti meglio cosa devi fare.

Per controllare se un email esiste occorre seguire questi step:

1) Prima di tutto devi risalire al server smtp correlato all'email perchè solamente quel server smtp è in grado di dirti se quell'indirizzo esiste o no. Facciamo un esempio, consideriamo m_cortonesi at ticino dot com dot Uno potrebbe pensare che il server è ticino.com, ma se apro Terminale e provo a connettermi alla porta 25 (porta sulla quale girano i servizi smtp) non riesco a connettermi. Vuol dire che sul server ticino.com non gira alcun servizio smtp. Meno male esistono i server dns. Se non lo sai, quando inserisci l'indirizzo di un sito web in Safari questo viene convertito in indirizzo IP grazie ai server DNS (domain name server) del tuo provider che sono "in connessione" con altri server dns per restare sempre aggiornati. Un servizio interessante dei server DNS è che ti possono dire esattamente qual è il server smtp di un dominio. Se apri Terminale esiste un tool creato appositamente per "indagare" su queste cose (infatti si chiama "dig"!). Per risalire al server smtp di ticino.com devi dunque scrivere:

dig ticino.com MX

------------------------------------------------------------------------ ------------------------------ dove MX sta per "Mail eXchange". Lui ti risponderà con un messaggio tipo:

; <<>> DiG 9.2.2 <<>> ticino.com MX
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27990
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;ticino.com.                    IN      MX

;; ANSWER SECTION:
ticino.com.             86400   IN      MX      10 mx4.ticino.com.
ticino.com.             86400   IN      MX      10 mx5.ticino.com.

;; ADDITIONAL SECTION:
mx4.ticino.com.         86400   IN      A       195.190.166.67
mx5.ticino.com.         86400   IN      A       195.190.166.58

;; Query time: 69 msec
;; SERVER: 195.190.166.166#53(195.190.166.166)
;; WHEN: Tue Mar 14 10:02:59 2006
;; MSG SIZE  rcvd: 100
------------------------------------------------------------------------ ------------------------------

Nell'answer section ci sono addirittura due server smtp, mx4.ticino.com e mx5.ticino.com.

2) Dopo aver determinato il server smtp dobbiamo usare un trucchetto per vedere se quell'email esiste. Apriamo Terminale e connettiamoci ad uno di quei server scrivendo:

telnet mx4.ticino.com 25

Il server risponderà:

220 mail2.ticino.com  MailSite ESMTP Receiver Version 7.0.3.8 Ready

Ora lo devi salutare con un dominio valido, che dovrebbe essere il tuo. Ma in realtà basta che gliene dai uno valido (molti server smtp accettano anche domini non validi). Quindi scriviamo:

HELO www.google.com

("HELO" è scritto volontariamente con solo una "L").

E il server risponde:

250 OK

A questo punto facciamo finta di voler mandare un email. Per mandare un email occorre prima di tutto specificare da chi è mandata. Noi diamo un qualsiasi indirizzo, dato che in realtà non la vogliamo mandare:

MAIL FROM: <test at gmail dot com>

Il server risponde:

250 <test at gmail dot com> OK

Ora proviamo a dirgli che vogliamo mandare un email a m_cortonesi at ticino dot com, e vediamo come risponde il server:

RCPT TO: <m_cortonesi at ticino dot com>

Il server risponde:

250 <m_cortonesi at ticino dot com> OK

Benissimo! L'email (ovviamente) esiste! La parte più importante di questa risposta è il codice, ossia le prime tre lettere. "250" significa che l'email è stato accettato. Devi verificare le prime tre lettere perchè quello che viene dopo può cambiare da server a server.

Se invece proviamo a chiedergli di mandare un email a: kjhasd8 at ticino dot com, lui risponde:

550 <kjhasd8 at ticino dot com> is not a valid mailbox

Quindi 550 è il codice con il quale il server non accetta l'email, e quindi quell'email non esiste.

Una volta verificati gli email basta chiudere la connessione (o se sei più educato scrivere "QUIT").

In realbasic per eseguire il comando dig basta che usi un oggetto shell:

Dim s as New Shell
Dim dominio, risposta as String

dominio = "ticino.com"
s.execute = "dig " + dominio + " MX"
risposta = s.result

Poi ovviamente dovrai manipolare un po' la stringa risposta per filtrare l'informazione che cerchi (quella dell'ANSWER SECTION), per questo consulta il manuale riguarda le funzioni NthField, Left, Mid, Trim.

A questo punto occorre ti occore un TCPSocket, come esempio lo puoi trascinare nella finestra e cominciare a giocarci un po'.

Innanzi tutti devi specificare l'indirizzo del server a cui vuoi connetterti e la porta:

TCPSocket1.port = 25 // È la porta per smtp
TCPSocket1.address = "mx4.ticino.com" // È il server smtp

A questo punto devi eseguire lo stesso procedimento che abbiamo fatto prima con telnet.
Semplicemente, per scrivere devi usare l'istruzione:

TCPSocket1.write "HELO www.google.com" // da scrivere nell'evento Connected del socket, ad esempio

Per leggere devi programmare l'evento DataAvailable. Questo evento viene attivato quando il socket ha ricevuto dei dati. Per capirci meglio, se tu appena connesso gli mandi "HELO www.google.com", lui dopo qualche secondo ti risponderà e quindi l'evento DataAvailable verrà richiamato.

In quell'evento per leggere cosa ti ha mandato il server e metterlo in una variabile "v", basta che scrivi:

Dim v As String

v = TCPSocket1.readall // oppure me.readall

A questo punto mi sembra di averti spiegato nei dettagli tutto.

Ciao Matteo

On 14-mar-06, at 00:47, ivano monti wrote:

http://centralops.net/co/default.asp

questo vorrei farlo con realbasic chi vuole tentare a farlo con me

[Contacting mx1.libero.it [193.70.193.95]...]
[Connected]
220 smtp9.libero.it ESMTP Service (1.2.8-PF-CM) ready
EHLO hexillion.com
250-smtp9.libero.it
250-PIPELINING
250-SIZE 7340032
250-ETRN
250 8BITMIME
MAIL FROM:<HexValidEmail at hexillion dot com>
250 Ok
RCPT TO:<ivanomonti at libero dot it>
250 Ok
RSET
250 Ok
QUIT
221 Bye
[Connection closed]

Ivano Monti
Sviluppo Gestionali e installazione siti professionali
P.R. ©® http://ivanomonti.iyelloworld.com/
P.R. ©® http://iyelloworld.com/
Forum > Filemaker > Java > Realbasic > MySQL & Php
Shopping > Aperto agli sviluppatori che vendono on line

(e) ivanomonti at iyelloworld
(e) ivanomonti at iyelloworld dot com
-
(t) 029693379
(f) 029693379
-
Skype = ivanomonti
AIM = ivanomonti
iChat = ivanomonti
Yahoo = ivanomonti
ICQ =  200782119
-





<Prev in Thread] Current Thread [Next in Thread>