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
-
|