PDA

Pogčedajte punu verziju : Provjera postoji li odredjena e-mail adresa?


dee
02. 08. 2006., 17:51
Imam nekakvu bazu mailova u kojoj se vremenom nakupilo smeca i trebam to na neki nacin pocistit. Smece su mailovi koji ili vise nisu aktualni ili ljudi pootvarali nove pa prosli quota i ne brigaju ili ukucavali mail koji ima ispravnu sintaksu ali realno ne postoji, itd itd...

Uglavnom, postoji li nacin da prodjem kroz tu bazu i provjerim postoji li zaista neki@mail.com ?

Ako neko ima nekakvu skriptu/ideju, pliz...

zahvaljujem
pozdrav!

Ilija Studen
02. 08. 2006., 17:59
Ja se iskreno nadam da ne postoji. To bi značilo da neko može da napravi skriptu koja generiše random email adrese i proverava da li postoje... A to ne bi bilo dobro.

Btw, mogao bi da polješ email na tu adresu sa obrazloženjem zašto ga šalješ i linkom u mailu koji omogućava korisniku da verifikuje email.

MorenoArdohain
02. 08. 2006., 18:03
Moze, hint: socket i MX records :)

Dinke zna vise o tome :)

marinowski
02. 08. 2006., 18:10
Mozes da proveris da li domen postoji, mozes da proveris da li postoji MX rekord za njega, mozes da se konektujes na port 25 servera (mozda ih ima vise!) i da 'razgovaras' sa SMTP serverom. U tom razgovoru si ranije mogao pitati da li prima postu za taj-i-taj nalog.

E, to uglavnom vise ne rade, radi sprecavanja potencijalnog SPAM-a i smanjivanja opterecenja na serverima.

dee
02. 08. 2006., 18:21
Moze, hint: socket i MX records :)

Dinke zna vise o tome :)

MX records bi rijesio zafrkanciju, da neko unosi blabla@buu.ble, znaci ono sta prolazi regexp validaciju maila, a ipak ej nepostojeci. to je dobro, dio problema rijeseno :)

a mogu li sta napravit recimo sa ovima koji su 'user over quota' ili sve te greske koje imaju MX record, ali se meni vraca nekakva greska?
ovo za socket ne razumijem (ne znam previse o tome), pa ako mozes daj jos koju rijec o tome :)

nije mi rjesenje slanje maila svakome pa validacija jer imam nekoliko hiljada adresa na koje saljem ljudima dnevne horoskope, a onda mi nije nesto simpaticno da im odjednom uvaljujem 'validirajte svoj mail'... jer tako baza vrlo lako padne sa 5 hiljada na 5 stotina :D a to mi ne treba. normalno, ako ne bude druge, morat cu, ali ako postoji neki drugi nacin, radije ne bi...

Ivan
02. 08. 2006., 19:16
zigor: Mozes da proveris da li domen postoji, mozes da proveris da li postoji MX rekord za njega, mozes da se konektujes na port 25 servera (mozda ih ima vise!) i da 'razgovaras' sa SMTP serverom. U tom razgovoru si ranije mogao pitati da li prima postu za taj-i-taj nalog.

Da, ovako su radili neki e-mail crawleri i jos neki "alatici" ...

misk0
02. 08. 2006., 21:34
Da, ovako su radili neki e-mail crawleri i jos neki "alatici" ...
Da, klasicna Vrfy komanda mail servera. Kad sam zadnji put provjeravao, radila je, ali to je bilo '99e :)

marinowski
02. 08. 2006., 22:21
Vazno je imati cistu bazu korisnika. Na zalost, to sa e-mailom nije lako, narocito ako su u pitanju mailing liste, a to u ovom slucaju jeste.

Mnogi se prijavljuju na takve mailing liste sa freemail naloga, pa kasnije na te naloge zaborave, prepune se, a nakon par meseci neaktivnosti se ukinu. Ako neko drugi kasnije registruje taj isti nalog, pocinje da dobija mailove na koje se nije pretplatio, sto je opet drugi problem.

Ranije si lepo mogao da pratis ne samo da li je pismo uruceno, nego da li je pismo otvoreno. No, to sada nije moguce, eksterne slike (preko kojih je najlakse pracenje) su po defaultu zabranjene, tako da nista vise od te (malo podmukle) tehnike.

Umesto da gledas koja adresa postoji, jednostavnije ti je da parsiras bounced back mailove. Na zalost, format bounced back mailova nije jedinstven, vise je human readable, a ne machine readable, makar bi serveri trebali jednoznacno da vrate kod greske u poruci.

Dakle, treba da parsiras vrh poruke koja se vratila, i da gledas da li imas nesto tipa
550 User not found
i slicno.
Kod greske (uvek je troznamenkast) koji pocinje sa 5 znaci da je to terminalna fatalna poruka, takav korisnik ne postoji na tom serveru.
Kod greske koji je oblika 3xx znaci da pismo nije uruceno, ali da je greska privremena, npr. over quota, server delay i slicno. Takve ostavi u e-mail listi.

Jos je lakse ako imas punu kontrolu nad serverom koji salje e-mailove, tada se ne parsiraju bounced back poruke, nego log od mail servera. Princip je isti, 'vataju se bounced back mailovi sa 5xx porukom.

5000 nije neka strasna cifra sto se tice mailova, serveri koji odrzavamo salju i preko 500.000 mailova dnevno (radi se bas o mailing listama takvog tipa), pa imam dosta iskustva oko ovakvih stvari.

srdjevic
02. 08. 2006., 22:26
Najbolji nacin da to uradis je: posaljes mail i u njega stavis reply-to da ti vrati na neku bounce email adresu koju ces da parsiras PHP-om (uvuci je preko POP3 a mozes i preko pipe-a).
Imas soft i hard vrste bounce-ova, imas i kodove da nadjes po netu, tako da ces tacno znati za svaki bounce kako i zasto je do toga doslo. Mi smo to koristili za newsletter sistem 1-2-All (guglaj da ne ispadne da reklamiram), mozes skinuti trial da vidis cisto kako izgleda. Naravno, nije program pisan za to, nego samo ima i tu opciju. ;-)

dee
02. 08. 2006., 22:57
@zigor
@srdjevic

puno hvala na objasnjenjima, sad imam neku predstavu kako to funkcionira i tako cu i napravit. reply-to je postavljen pa cu proci kroz povratne mailove i vidjet sta u kojem slucaju vraca.

evo bas gledam, jedan od slucajeva:

host mx.net.hr[213.191.133.143] said: 550 No such user

ili

host mx1.mail.yahoo.com[4.79.181.14] said: 554
delivery error: dd This user doesn't have a yahoo.com account

prodjem sve vracene, one s 5xx greskom odrezem i mirna bosna :)


hvala svima!

marinowski
02. 08. 2006., 23:38
Oprez! Nasao sam ranije par primera gde je server vracao 5xx, a nije bila fatalna greska. Bilo je to dosta davno kada sam gledao, pa ne mogu na brzinu da se setim, ali preporucujem ti da potrosis vreme da pregledas sve te poruke, da ne izbrises slucajno nekoga koga ne trebas.

srdjevic
03. 08. 2006., 06:15
Upravo tako. Bolje ti prvo znaj koja je koja poruka (nadji negde spiskove), pa polako. Ustedeces dosta vremena. ;-)

dinke
03. 08. 2006., 09:27
[twinkie]$ dig dinke.net mx

; <<>> DiG 9.2.4 <<>> dinke.net mx
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12568
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;dinke.net. IN MX

;; ANSWER SECTION:
dinke.net. 14400 IN MX 0 fltr-in2.mail.dreamhost.com.
dinke.net. 14400 IN MX 0 fltr-in1.mail.dreamhost.com.
dinke.net. 14400 IN MX 0 fltr-in3.mail.dreamhost.com.

;; Query time: 93 msec
;; SERVER: 66.33.216.208#53(66.33.216.208)
;; WHEN: Thu Aug 3 00:23:45 2006
;; MSG SIZE rcvd: 120

[twinkie]$ telnet fltr-in2.mail.dreamhost.com 25
Trying 66.33.206.231...
Connected to fltr-in2.mail.dreamhost.com.
Escape character is '^]'.
220 deathwish.dreamhost.com ESMTP
ehlo ja
250-deathwish.dreamhost.com
250-PIPELINING
250-SIZE 40960000
250-ETRN
250 8BITMIME
mail from: <pera@nepostojeci.com>
250 Ok
rcpt to: <pera@dinke.net>
550 <pera@dinke.net>: Recipient address rejected: User unknown.
quit
221 Bye
Connection closed by foreign host.
[twinkie]$


Ukratko, simuliras smtp protokol, do tacke kada dobijes podatak user ok ili 550 da user ne postoji i onda prekines konekciju. Nazalost, ovaj metod nije ni blizu 100% pouzdan, iz razloga koje je Zigor vec pomenuo.

Pouzdaniji metod je koriscenje qmail-remote programa za slanje mailova, jer on moze da salje natrag i konfirmaciju da li je mail isporucen ili ne, ali proces je znatno sporiji od ovog gore navedenog (ni on nije 100% pouzdan), plus moras da saljes e-mail korisniku.
Sa qmail-remote se nisam bakcao nekoliko godina, nije iskljuceno da ni taj metod vise ne funkcionise

misk0
03. 08. 2006., 11:23
Jos jedan 'nacin' mi pade na pamet. Vidjao sam to kod MaMML komponente (newsletter manager) za Joomla. A koristi upravo onaj web beacon koji sam spominjao u drugoj temi.
Znaci u news letteru (ukoliko je u HTML obliku) ubacis IMG tag koji upucuje na neki php fajl na tvom serveru sa parametrom tog e-maila. Kad user otvori, ti imas zapravo informaciju da ga ja otvorio i da je ziv. Naravno da ni to nije 100% sigurna metoda ali mozda ako koristis par ovih filtera tj kombinacija smanjices broj nepostojecih e-mailova.
Uostalom ako neko ne zeli da otvori tvoj e-mail znaci da ga to vishe i ne interesuje da i bi bilo i dobro da ga skines sa liste (osim ako nije cilj napraviti broj).

bluesman
03. 08. 2006., 11:47
To je na žalost totalno nepouzdano, dovoljno je da korisnik izabere da sve čita plain text i da ga ti izbaciš sa liste pošto ti je nije "javilo" :)

Taj beacon se koristi najviše u nekim affiliate programima, radio sam nešto slično. Imaš recimo affiliate sajt koji prima i merchante i webmastere. Daš im linkove, a pošto želiš da proveriš svaki link, niko ne ide direktno na sajt nego link vodi na tvoj neki "redirect". Ti onda loguješ njegove podatke u bazu, i šalješ ga na sajt, a na sajtu stoji jedan IMG 1x1 koje je SRC="affiliatesajt/provera.php" u kojoj se ponovo proveravaju podaci korisnika, da li mu je to prvi klik ili neko fake-uje klikove, da li je dosao stvarno preko affiliate linka.... itd. Taj IMG izbaci samo 1x1 beli GIF i ne vidi se na strani.

Tu naravno postoji dosta "problema ako se proverava samo IP jer dosta ljudi koriste share-ovan IP, a dosta provajdera generiše dinamičke IP-ove za skoro svaki request, pa može da se desi da isti user na jednoj strani im jedan IP a na drugoj na istom sajtu totalno drugi.

Ja mislim da je, ako se ne traži aktiviranje profila preko email-a, dinketovo rešenje najbolje.

dee
03. 08. 2006., 12:49
puno hvala svima na odgovorima!

[nisam ni znao da se ta prica oko 1x1 gifa zove 'beacon' - ubise me tolika imena za sve i svasta :) ]

problem je ako gleda sve samo kao plain-text ili pak ako mu mail-client po defaultu blokira prikaz slika u mailu upravo iz tih razloga 'zastite privatnosti'. tako je recimo podeseno ovdje kod mene na poslu - kad otvoris mail umjesto slika crveni krizici i tek na korisnicki right-click + allow images se pokazu slike. posto mail koji ja saljem ljudima sadrzi samo tekst (dnevni horoskop od par recenica) i svi ovi sa blokiranim prikazom slika otpadaju. tako da mi to nije rjesenje.

cini se da cu morat svakako proc kroz sve mailove i vidjet sve povratne poruke, pa pronac spiskove poruka da vidim tocno sta koja znaci i brisat samo one koji su s fatalnom greskom (user unknown ili tako nesto), a ostali, npr. 'over quota' nek ostaju. ionako svaki mail ima obavijest o adresi za odjavu, pa ako se covjek sjeti nakon iks vremena pogledat mailbox i npr. sredit quota limit, ili ce greska nestat ili ce se odjavit, a oboje je prihvatljivo.

Ja mislim da je, ako se ne traži aktiviranje profila preko email-a, dinketovo rešenje najbolje.

a nisam ni sam pametan, nesto mi je samo 'primanje dnevnog horoskopa na mail' presitna stvar da ih trazim aktivaciju. posto na sajtu nema nekog 'logged users area', to mi se cinilo ko previse komplikacije za obican dnevni horoskop; puno buke nizasto. iako, naravno da ima svoje ocite prednosti

dee
03. 08. 2006., 17:27
nasao sam nesto pa ako ce jos nekome bit korisno nek stoji ovdje:

http://www.supermailer.de/smtp_reply_codes.htm