Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sprawdzenie adresu e-mail
Forum PHP.pl > Forum > PHP
sytluk
Witam,

tworzę skrypt wysyłający wiadomości e-mail, niestety nie wiem jak mógłbym sprawdzić istnienie adresów e-mail w bazie danych. Nie chodzi o sprawdzenie czy adres e-mail został poprawnie wpisany ani aktywację adresu, tylko sprawdzenie czy jeszcze taki adres istnieje. Czy jest w ogóle taka możliwość?

Pozdrawiam.
Ges
Poza oczywistym sprawdzeniem poprawności formatu emaila, jedynm ze sposobów to przygotowanie mailpipe na adresie ustawiony jako reply-to w wysylanych emailach.

Wysyłając emaila na nieistniejący adres dostaniesz emaila zwrotnego z informacją, że takie konto nie istnieje.
Możesz przygotować skrypt, który będzie te maile odbierał i parsował oraz odznaczał emaile jako nieprawidłowe (bądź kasował).
kokers
zanim wyślesz wiadomość sprawdź w bazie czy adres istnieje. Zwykły Select. Jeśli nie istnieje to zwróci num_rows=0
wNogachSpisz
Cytat(sytluk @ 8.11.2011, 09:40:54 ) *
jak sprawdzić istnienie adresów e-mail w bazie danych

Przeszukać bazę danych?

Cytat(sytluk @ 8.11.2011, 09:40:54 ) *
Czy jest w ogóle taka możliwość?

Jest. Ciężko wyobrazić sobię bazę danych której nie dało by się użyć w tak podstawowy sposób.
sytluk
Źle się wyrazilem, chodziło mi o to, jak sprawdzić czy zapisany w bazie danych adres e-mail istnieje, czy skrypt ma na co wysylać wiadomość, czy może wlaściciel e-maila go skasował, np. ktoś podał swój adres e-mail, za miesiąc go skasował bo założył inny e-mail, a skrypt dalej wysyła wiadomości na nieistnejący już e-mail. Chcę się dowiedzieć jak sprawdzić, czy adres jeszcze istnieje, czy może ktoś go już skasował.
abort
Tak bezpośrednio, to niespecjalnie. Możesz conajwyżej dorobić warunek na istnienie domeny danego maila. Jeśli jesteś w stanie w kodzie dorobić sprawdzenie, czy istnieje w DNS rekord MX dla tej domeny, to jesteś niewielki kroczek bliżej:

Kod
host -t MX gmail.com
gmail.com mail is handled by 30 alt3.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 40 alt4.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 5 gmail-smtp-in.l.google.com.
gmail.com mail is handled by 10 alt1.gmail-smtp-in.l.google.com.
gmail.com mail is handled by 20 alt2.gmail-smtp-in.l.google.com.

hostem przyjmującym maile dla danej domeny jest gmail-smtp-in.l.google.com - i tyle jesteśmy na 100% w stanie ustalić

I właściwie na tym się kończy. Ludzie blokują komendę VRFY protokołu (E)SMTP, przykład:

Kod
telnet gmail-smtp-in.l.google.com. 25
Trying 74.125.39.27...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP a16si4280408fak.96
vrfy dowolnyuser@gmail.com
252 2.1.5 Send some mail, I'll try my best a16si4280408fak.96
quit
221 2.0.0 closing connection a16si4280408fak.96
Connection closed by foreign host.


Jak sam widzisz, serwer mówi (w przetłumaczeniu na polski) "ślij maila, zobaczmy, co da się zrobić".
Więc jak wyślesz maila, to masz kilka możliwości:
1. mail istniejeje i zostanie dostarczony - co jest dobrym znakiem, ale nie zostaniesz o tym poinformowany (o ile nie użyjesz DSN - Delivery Status Notification, choć nie wszystkie serwery muszą to honorować)
2. mail istnieje, ale... w danej chwili nie da się dostarczyć maila do usera - możesz dostać informację, że na zapasowych serwerach mailowych Twój mail stoi gdzieś w kolejce, i owe serwery będą próbować przez ileś czasu dostarczać
3. Mail istnieje, ale... user ma pełną skrzynkę - dostaniesz zwrotkę z informacją w stylu "mailbox full".
4. Mail nie istnieje - więc nie zostanie dostarczony - dostaniesz zwrotkę "no user".

Generalnie, musiałbyś każdą informację zwrotną obrabiać na serwerze (jeśli to unix/linux, to polecam robić to za pomocą procmaila - żeby nie przetwarzać każdego maila przychodzącego do postmastera). Przy czym nie każda informacja o problemach z dostarczeniem maila na daną skrzynkę równa się informacji o braku skrzynki. Więc procmail musiałby uruchamiać jakiś skrypt (może nawet wywołać skrypt w php, bo da się to zrobić z linii poleceń), który daną zwrotkę przeszuka na okoliczność najczęstszych komunikatów (lub jeszcze lepiej - ich statusów) i w razie informacji o braku usera (zwrotka z przyczyn, że "user nie istnieje"), połączy się z bazą i sam uaktualni pole w bazie na "" (pole z emailem, oczywiście). Może też zrobić dosłownie cokolwiek z kontem - np. je zawiesić, skasować... full serwis smile.gif

Jak widać, da się jednak to zrobić, ale wymaga to niezłego nakładu pracy. Niemniej, niewykonalne nie jest.
fernet
Po prostu ślij spam i nie zastanawiaj się czy dochodzi
celbarowicz
Użytkownik ma zapewne nr id, w tej samej lub innej tabeli zapisany jest adres email. Po numerze id sprawdzasz czy email istnieje . Jeśli adres został zmieniony to musiał zastąpić stary adres|(chyba, że można wpisać kilka adresów). Jeśli adresu nie ma to nie wysyłasz. Czy o to chodzi?
Sprawdź jaki adres podałeś na forum.
abort
@celbarowicz - to już było wałkowane, nie czytałeś wątku.

Piszesz "po numerze id sprawdzasz, czy email istnieje". Guzik prawda. Sprawdzisz conajwyżej to, jaki adres został wpisany przez usera (np. rok temu przy rejestracji). A nie sprawdzisz tego, że np. jest to adres firmowy i właśnie gość się zwolnił, konto (a w efekcie mail) mu skasowali zanim sobie przypomniał, że jeszcze na tym forum powinien sobie adres uaktualnić na nowy, istniejący.

To że adres istnieje w bazie nie jest tożsame z tym, że adres emailowy istnieje. A właśnie o sprawdzenie istnienia adresu email jest ta dyskusja.
fernet
A tak powaznie abort wspomnial o dyskusji z serwerem problem z dyskusjami jest taki ze kazdy kolejny serwer chce byc oryginalny i gada co mu sie tam podoba wiec albo napiszesz skrypt ktory bedze rozumial jakas tam liczbe serwerow i sie bardzo spocisz a skrypt i tak bedzesz mogl wyrzucic do smieci bo nie uda Ci sie zrozumiec wszystkich serwrow albo sprawdzisz czy mail doszedl i czy zostal obejrzany i na podstawie tego podejmniesz decyzje o tym czy mail utrzymywac dluzej w bazie czy tez nie. Ja w swoim mailerze mam cos takiego ze w tresci maila jest BONUS ktory identyfikuje odbiorece i jest ladowane z zewntrz w tym przypadku ode mnie a zaladowanie tego BONUSA odnotowywane jest w mojej aplikacji i po rozeslaniu maili moge sprawdzic kto i o ktorej go odebral nieodebrane maja specjalny kolor poziomow(kolorow) jest 5 a czerwone moge usunac klikajac w magiczny guzik jednak tego nie robie bo wyslanie maila nic nie kosztuje smile.gif
abort
Cytat(fernet @ 11.11.2011, 21:28:21 ) *
A tak powaznie abort wspomnial o dyskusji z serwerem problem z dyskusjami jest taki ze kazdy kolejny serwer chce byc oryginalny i gada co mu sie tam podoba


Nieprawda.

Kod
220 mx.google.com ESMTP a16si4280408fak.96
252 2.1.5 Send some mail, I'll try my best a16si4280408fak.96
221 2.0.0 closing connection a16si4280408fak.96


Widzisz te trzycyfrowe liczby na początku każdej linii? To ustandaryzowane kody odpowiedzi - między innymi po to, by nie trzeba było uczyć programów rozumienia tekstu w języku np. suahili. Kod odpowiedzi jest ustandaryzowany, a tekst dołączony może być w dowolnym języku. Ba, nawet komunikat o braku usera może mieć postać "550 Wyslij maila". Serwery (normalne) zignorują treść, a mail nie zostanie dostarczony, bo kod błędu 550 to (według RFC) "Requested action not taken: mailbox unavailable".

Poczytaj RFC 2821, punkty od 4.2 do 4.2.2 i nie siej zamętu.

Nie jesteś w stanie sprawdzić, kto i kiedy ODEBRAŁ maila - jesteś conajwyżej w stanie stwierdzić, kiedy dany mail dotarł do skrzynki. Potwierdzenie przeczytania można wyłączyć, wiesz?

fernet
Gadanie z serwerem do niczego Cie nie doprodzi tak jak i moje html'owe bonusy do zadnych konkretnych wnioskow nikogo nie doprowadza. Jest to bledne kolo i nie ma 100% metody weryfikacji maila na serwerze zewnerznym. Taka weryfikacje moze przeprowadzic sam serwer lokalnie i zaden z nich nie ma ochoty dzielic sie tymi informacjami z innymi. Wrzucasz telneta z google pogadaj do tego z tlenem onetem wp interia aol i co Ci tam jeszcze do glowy przyjdze i jesli uzyskasz odpowiedzi ktore bedzesz mogl ustandaryzowac i na ich podstawie podjac 100% wlasciwe decyzje to jests w posiadaniu oprogramowania za ktore spamerzy zaplaca krocie pod warunkiem ze wczesiej nikt nie wklei bana z serie zapytan. Wracajajac do BONUSOW i html kazda kolejna poczta ma swojego super kleinta w przegladarce. Jesli klient jest mi znany i wiem jak przerobi sobie html to tam leci odpowedni html ktory bedze wygladal porzadnie jesli klient nie jest mi znany i nie mam dla niego html to lecia plain text z info i adresem ktorego trzeba kliknac czy tez skopiowac zeby obejrzec wlasciwa tresc w jakiejs mojej lokalizacji a wejsce na te lokalizacje jest odnotowywane. Istnieja poczty ktore pomijaja wlasciwe adresy url i nie drukuja ich wcale a to znaczy ze juz palin text nie jest juz taki pewny. Dla takich odbiorcow trzeba opatrzec adres jakimiś kwiatkami wlasciwymi dla tej wlasnie poczty zeby sie w ogule wyświetlil. Poczty zrobily bardzo duzo zeby kolorowe maile w html od x kolesi w ich klientach nie wyswietlaly sie poprawnie inne poczty dodatkowo zrobili tak ze ich spam wyswietla sie ladnie a zewnetrzny wylazi polamany. Jesli Ty uwazasz ze Twoje gadki z poziomu zapytan dprowadza Cie do wlasciwych wnioskow to teoretycznie jestes w posiadaniu calej listy adresowj google i kazdej innej poczty a to by znaczylo ze jestes miliarderem biorac pod uwage koszt pojedynczego aktywnego maila i fakt ze Twoje beda tansze bo nie masz do nich preferencji i danych osobowych uzytkownika ale skoro mozesz wyciagnac adresy to z danymi osobowymi tez sobie poradzisz.
abort
Mała prośba: pisz krótszymi zdaniami, żeby dało się czytać smile.gif

Cytat
nie ma 100% metody weryfikacji maila na serwerze zewnerznym. Taka weryfikacje moze przeprowadzic sam serwer lokalnie i zaden z nich nie ma ochoty dzielic sie tymi informacjami z innymi.


Ależ dzieli się tymi informacjami... Podajesz takiemu serwerowi adres skrzynki i treść maila, a on dostarcza albo i nie. Dostarczenie maila domyślnie (czyli: o ile nie użyjemy DSN) nie powoduje zwrotki w postaci "mail dotarł", natomiast niedostarczenie maila w 100% generuje taką zwrotkę. Dla mnie są to konkretne informacje ze zdalnego serwera mail, niech będzie, że z gmaila (skoro go już zacytowałem) Na tej podstawie twierdzę, że DA SIĘ ustalić ISTNIENIE adresu email z naszej bazy. No, może nie w 100% - zostawmy powiedzmy 1% na źle skonfigurowany antyspam po stronie odbiorcy (zarówno na serwerze, jak i w kliencie poczty). Używając DSN można zaryzykować stwierdzenie, że w 100% zweryfikowaliśmy dany konkretny email.

Problem jest taki, że jeśli pokażemy to jako operację na zbiorach, to sprawdzenie istnienia skrzynki przez wysłanie maila jest tak de facto pytaniem "czy dany email x należy do zbioru X wszystkich maili, które jesteś w stanie obsłużyć". I serwer przez swoją akcję nam odpowiada: TRUE lub FALSE.
Natomiast NIE MA i śmiem twierdzić, że NIE BĘDZIE nigdy możliwe zdalne odpytanie serwera "podaj mi zbiór X wszystkich maili, które obsługujesz".

Nie wiem, jaka logika zaprowadziła Cię do założenia, że jestem w stanie poznać wszystkie maile z google (czy dowolnego innego serwera pocztowego). Nigdy tego nie twierdziłem, i musiałbym oszaleć, by coś takiego stwierdzić.
fernet
Skoro mozesz dowiedziec sie czy jeden mail w obrebie gmaila jest aktywny bo nie dostaniesz "false" to wyslanie takich maili kilkadziesiat tysiecy na inne adresy generowane przypadkowo nie powino stnowic dla ciebie wieszkszego problemu i tam rowniez dostaniesz albo nie dostaniesz "false"
abort
Owszem, załóżmy, że mógłbym wysłać nawet te kilkadziesiąt tysięcy. I co mi to da? Załóżmy, że poznam kilka, nawet powiedzmy, że będę optymistą i poznam sto maili. Uważasz, że to dobry wynik?

Pytanie drugie: załóżmy, że maile na gmailu mają człon przed "@" conajwyżej szesnastoznakowy. Dalej: załóżmy, że jesteś wysyłać nawet milion maili na sekundę (i że dostajesz potwierdzenie natychmiast). Jak myślisz, ile czasu by Ci zajęło sprawdzenie wszystkich skrzynek mailowych?
Wiesz w ogóle, o czym piszesz? smile.gif
fernet
Napisz wyraznie po jakim czasie przychodzi ci false o ile w ogule przychodzi dla kazdego niepoprawnego maila bo w rfc'eku tego nie sprecyzowali
abort
Nie napisałem wyrażenia "niepoprawnego maila". Napisałem, że wysłanie maila na nieistniejącą skrzynkę powoduje otrzymanie zwrotki o nieistniejącym mailu. I przychodzi niemal natychmiast - w fazie dialogu SMTP. Odsyłam jeszcze raz do http://www.ietf.org/rfc/rfc2821.txt - punkty: 3.3, 4.2, 4.2.1, 4.2.2

P.S.
Nie odpowiedziałeś mi na pytanie z mojego poprzedniego posta.

fernet
Nieistniejąca skrzynka, niepoprawny mail dla mnie to jedno i to samo a odpowiedz możesz mieć natychmiast lokalnie. Kwestia wygenerowania ciągów jest kwestia procesora i programu który miałby to zrobić ale skoro nadal uważasz ze jesteś w stanie sprawdzić czy dany adres w obrębie jakiejś zewnętrznej poczty istnieje bez konieczności interakcji z użytkownikiem to super ja muszę wchodzić z nim w interakcje.

http://www.email-unlimited.com/tools/verify-email.aspx

z tym ze od czasu do czasu bedze trzeba zminic serwer
abort
Cytat(fernet @ 13.11.2011, 00:59:10 ) *


Fajnie, że podajesz miłego toolsa do sprawdzenia istnienia jakiegoś adresu email. I po pobieżnych testach strwierdzam, że działa całkiem nieźle.
Ciekawe tylko są następujące rzeczy...

1. ów tool właśnie gada z serwerem - przedstawia się i zgłasza gotowość wysłania poczty (której zapewne nie wysyła, bo nie do tego służy). Dialog z serwerem SMTP jest nawet wyświetlany jako "log":
Kod
Connect:
Get MX for whitehouse.gov... OK.
Connect to mail4.eop.gov... OK
= 220 mail4.eop.gov ESMTP
> EHLO email-verifier.net
= 250-mail4.eop.gov
250-8BITMIME
250-SIZE 52428800
250 STARTTLS
> MAIL FROM: <info@email-verifier.net>
= 250 sender <info@email-verifier.net> ok
> RCPT TO: <president@whitehouse.gov>
= 250 recipient <president@whitehouse.gov> ok
> QUIT


Dziękuję, że potwierdziłeś moją tezę, że DA SIĘ zweryfikować istnienie jednego konkretnego adresu email. Podałeś narzędzie, które robi dokładnie to, co ja zaproponowałem.

2. Nie podałem tam swojego maila, tool napisany przez "email marketing software" powoduje, że jakoś nieszczególnie mam chęć umieszczać tam swojego maila. Powód: podejrzenie, że wszystkie adresy ze statusem "OK" lądują na liście pozytywnie zweryfikowanych adresów - czyli takich, na które span na pewno DOJDZIE BEZ ZWROTKI.

3. Kiedyś pisałeś:
Cytat(fernet @ 12.11.2011, 19:48:14 ) *
Jesli Ty uwazasz ze Twoje gadki z poziomu zapytan dprowadza Cie do wlasciwych wnioskow to teoretycznie jestes w posiadaniu calej listy adresowj google i kazdej innej poczty a to by znaczylo ze jestes miliarderem

Ciekawe, dlaczego nie słyszę jeszcze o tym, by firma Live Software była potentatem na rynku rozwiązań reklamowych? Owszem, znana jest - ale do bycia potentatem to im wiele brakuje....

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.