![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 20.02.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Czy w php istnieje funkcja pozwalająca sprawdzić, czy w danej domenie istnieje skrzynka email o podanej nazwie. Najlepiej, żeby potrafiło także sprawdzać aliasy. Szukałem w manualu, ale wydaje mi się, że imap_open raczej nie spełnia moich wymogów... -------------------- Wieczność jest bardzo nudna, szczególnie pod koniec - Woody Allen
/home/env: Apache 2.2 | PHP 5.2 | MySQL 5.1 | FreeBSD 8.0 | NetBeans 6.8 | symfony 1.4 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o [manual:82cd9ca670]getmxrr[/manual:82cd9ca670] ?
Zobacz komentarze, może to sie przyda [php:1:82cd9ca670]<?php $host=$host."."; if ( getmxrr( $host, $mxhosts ) == FALSE && gethostbyname( $host ) == $host ) { echo "$host is not a valid e-mail host."; } else { echo "$host is a valid e-mail host."; } ?>[/php:1:82cd9ca670] Aha, php Początkujący -> php -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Witam!
Czy w php istnieje funkcja pozwalająca sprawdzić, czy w danej domenie istnieje skrzynka email o podanej nazwie. Najlepiej, żeby potrafiło także sprawdzać aliasy. Niewykonalne. Nigdy nie masz gwarancji istnienia skrzynki, że o aliasie nie wspomnę. Była już kiedyś o tym dyskusja. Poszukaj na forum. Cytat Szukałem w manualu, ale wydaje mi się, że imap_open raczej nie spełnia moich wymogów...
imap_open pozwala Ci otworzyć skrzynkę tylko jeśli masz do niej prawa (np. znasz login i hasło). Jeśli skrzynka nie istnieje najprawdopodobniej również dostaniesz błąd, że podałeś złe hasło (w przypadku zdalnych skrzynek oczywiście). |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.10.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Czesc. Moim skromnym zdaniem jest to mozliwe, a jesli chcesz sprawdzic to wejdz na strone kliknij menu Pomoc i sprubuj wyslac maila na nie istniejącą skrzynkę pocztową i zobaczysz co się stanie
![]() Nie wysyłaj tylko z istniejącym adresem skrzynki pocztowej, chyba ze w temacie wpisz test, bo jest to firmowa strona, a ja jestem tam tylko adminem. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 144 Pomógł: 0 Dołączył: 29.06.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
[php:1:ed246c07cb]<?php
/* ======================================================================= ifsnow's email valid check function SnowCheckMail Ver 0.1 funtion SnowCheckMail ($Email,$Debug=false) $Email : E-Mail address to check. $Debug : Variable for debugging. * Can use everybody if use without changing the name of function. Reference : O'REILLY - Internet Email Programming HOMEPAGE : http://www.hellophp.com ifsnow is korean phper. Is sorry to be unskillful to English. *^^*;; ========================================================================= */ function SnowCheckMail($Email,$Debug=false) { global $HTTP_HOST; $Return =array(); // Variable for return. // $Return[0] : [true|false] // $Return[1] : Processing result save. if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $Email)) { $Return[0]=false; $Return[1]="${Email} is E-Mail form that is not right."; if ($Debug) echo "Error : {$Email} is E-Mail form that is not right.<br>"; return $Return; } else if ($Debug) echo "Confirmation : {$Email} is E-Mail form that is not right.<br>"; // E-Mail @ by 2 by standard divide. if it is $Email this "lsm@ebeecomm.com".. // $Username : lsm // $Domain : ebeecomm.com // list function reference : http://www.php.net/manual/en/function.list.php // split function reference : http://www.php.net/manual/en/function.split.php list ( $Username, $Domain ) = split ("@",$Email); // That MX(mail exchanger) record exists in domain check . // checkdnsrr function reference : http://www.php.net/manual/en/function.checkdnsrr.php if ( checkdnsrr ( $Domain, "MX" ) ) { if($Debug) echo "Confirmation : MX record about {$Domain} exists.<br>"; // If MX record exists, save MX record address. // getmxrr function reference : http://www.php.net/manual/en/function.getmxrr.php if ( getmxrr ($Domain, $MXHost)) { if($Debug) { echo "Confirmation : Is confirming address by MX LOOKUP.<br>"; for ( $i = 0,$j = 1; $i < count ( $MXHost ); $i++,$j++ ) { echo " Result($j) - $MXHost[$i]<BR>"; } } } // Getmxrr function does to store MX record address about $Domain in arrangement form to $MXHost. // $ConnectAddress socket connection address. $ConnectAddress = $MXHost[0]; } else { // If there is no MX record simply @ to next time address socket connection do . $ConnectAddress = $Domain; if ($Debug) echo "Confirmation : MX record about {$Domain} does not exist.<br>"; } // fsockopen function reference : http://www.php.net/manual/en/function.fsockopen.php $Connect = fsockopen ( $ConnectAddress, 25 ); // Success in socket connection if ($Connect) { if ($Debug) echo "Connection succeeded to {$ConnectAddress} SMTP.<br>"; // Judgment is that service is preparing though begin by 220 getting string after connection . // fgets function reference : http://www.php.net/manual/en/function.fgets.php if ( ereg ( "^220", $Out = fgets ( $Connect, 1024 ) ) ) { // Inform client's reaching to server who connect. fputs ( $Connect, "HELO $HTTP_HOSTrn" ); if ($Debug) echo "Run : HELO $HTTP_HOST<br>"; $Out = fgets ( $Connect, 1024 ); // Receive server's answering cord. // Inform sender's address to server. fputs ( $Connect, "MAIL FROM: <{$Email}>rn" ); if ($Debug) echo "Run : MAIL FROM: <{$Email}><br>"; $From = fgets ( $Connect, 1024 ); // Receive server's answering cord. // Inform listener's address to server. fputs ( $Connect, "RCPT TO: <{$Email}>rn" ); if ($Debug) echo "Run : RCPT TO: <{$Email}><br>"; $To = fgets ( $Connect, 1024 ); // Receive server's answering cord. // Finish connection. fputs ( $Connect, "QUITrn"); if ($Debug) echo "Run : QUIT<br>"; fclose($Connect); // Server's answering cord about MAIL and TO command checks. // Server about listener's address reacts to 550 codes if there does not exist // checking that mailbox is in own E-Mail account. if ( !ereg ( "^250", $From ) || !ereg ( "^250", $To )) { $Return[0]=false; $Return[1]="${Email} is address done not admit in E-Mail server."; if ($Debug) echo "{$Email} is address done not admit in E-Mail server.<br>"; return $Return; } } } // Failure in socket connection else { $Return[0]=false; $Return[1]="Can not connect E-Mail server ({$ConnectAddress})."; if ($Debug) echo "Can not connect E-Mail server ({$ConnectAddress}).<br>"; return $Return; } $Return[0]=true; $Return[1]="{$Email} is E-Mail address that there is no any problem."; return $Return; } ?>[/php:1:ed246c07cb] Powinno działać... -------------------- if(function_exists("zrozum_kobiete")){
echo "Niemożliwe!"; exit;} |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Powinno działać...
Ale nie działa. Dlaczego tak uparcie wszyscy starają się znaleźć metodę na rozwiązanie tego, skoro dla protokołu SMTP jest to w ogólności nierozwiązalne? Jedyne na czym może bazować zewnętrzny kod sprawdzający istnienie skrzynki to odpowiedzi od serwera pocztowego. I o ile jeszcze w przypadku odpowiedzi, że skrzynki nie ma, możemy być tego pewni, to potwierdzenie przyjęcia listu nie gwarantuje w żaden sposób tego, że ona istnieje. Wysyłanie komunikatu o tym, że podany adres jest błędny to tylko i wyłącznie dobra wola administratora. Jeśli będzie chciał to nikt z zewnątrz nie odróżni istniejącego adresu od nieistniejącego. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 21.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
kris:~$ telnet 127.0.0.1 25
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 kris.wlkp.pl ESMTP Sendmail 8.12.9/8.12.6; Mon, 13 Oct 2003 22:39:50 +0200 (CEST) helo lamer 250 kris.wlkp.pl Hello localhost [127.0.0.1], pleased to meet you mail from: kris@wlkp.top.pl 250 2.1.0 kris@wlkp.top.pl... Sender ok rcpt to: test 550 5.1.1 test... User unknown rcpt to: kris 250 2.1.5 kris... Recipient ok quit 221 2.0.0 kris.wlkp.pl closing connection Connection closed by foreign host. adwol ja rozumiem o co Tobie chodzi, ale to jest zawsze jakis sposob. Lepszy rydz niz nic mozna spokojnie uznać że 99% serverów prawidłowo zareaguje na to sprawdzenie |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czesc. Moim skromnym zdaniem jest to mozliwe, a jesli chcesz sprawdzic to wejdz na strone skaytek.and.pl kliknij menu Pomoc i sprubuj wyslac maila na nie istniejącą skrzynkę pocztową i zobaczysz co się stanie
![]() Spróbowałem i zobaczyłem to: Kod Warning: fsockopen(): unable to connect to xxx.xxxx.pl:25 in /var/set/virtual/and.pl/httpd/skaytek/cgi-bin/wer_domain.php on line 57
Pomijając fakt, że ten skrypt jakoś nie radzi sobie z DNSowymi rekordami MX (próbuje na siłę wysłać do serwera, który chociaż jako pierwszy jest zwracany przez DNS, lecz ma mniejszy priorytet), to nie wierzę za bardzo w jego jasnowidztwo. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.10.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
sorki...sorki wszystkich - weryfikacja adresu emila na stronie skaytek.and.pl jest nie prawidlowa poniewaz dopiero sam to zweryfikowalem he.. he.. mały blad poprostu nie ten plik (stara wersja)
Macie nową i na pewno działa no może tylko na wp.pl nie , moze ktos wie czemu serwer przyjmuje wszystkie smieci he.. he.. to niech mi da znac... ups... [php:1:16c90898c3]<?php /* ** Funkcja: verifyEmail ** Argumenty: STRING address, REFERENCE error ** Wartość: BOOLEAN ** Opis: próbuje zweryfikować adres email ** kontaktując się z wymiennikiem poczty. Zarejestrowane wymienniki ** są wywoływane najpierw przez kontrolera domen, ** a następnie przez samą domenę. Argument error ** będzie zawierał stosowny tekst w przypadku niemożliwości weryfikacji adresu ** */ $address = "weryfikujmnie@interia.pl"; //$address = "weryfikujmnie@klub.chip.pl"; //$address = "weryfikujmnie@poczta.onet.pl"; //$address = "weryfikujmnie@wp.pl"; function verifyEmail($address, &$error) { global $SERVER_NAME; list($user, $domain) = split("@", $address, 2); //upewnienie się czy domena posiada wymiennik poczty if(checkdnsrr($domain, "MX")) { //pobranie informacji z wymiennika if(!getmxrr($domain, $mxhost, $mxweight)) { $error = "Nie można pobrać wymienników poczty!<BR>n"; return(FALSE); } } else { //Jeżeli nie ma wymienników, być może //sam host przyjmuje pocztę $mxhost[] = $domain; $mxweight[] = 1; } //utworzenie sortowanej tablicy hostów for($i = 0; $i < count($mxhost); $i++) { $weighted_host[($mxweight[$i])] = $mxhost[$i]; } ksort($weighted_host); //pętla wśród poszczególnych hostów foreach($weighted_host as $host) { //połączenie z portem hosta SMTP if(!($fp = fsockopen($host, 25))) { //nie można połączyć sie z tym hostem, //być może następny będzie działał continue; } /* ** przepuszczenie 220 wiadomości ** rezygnacja w przypadku braku odpowiedzi w czasie 10 sekund */ set_socket_blocking($fp, FALSE); $stopTime = time() + 10; $gotResponse = FALSE; while(TRUE) { //próba pobranie wiersza z serwera pocztowego $line = fgets($fp, 1024); if(substr($line, 0, 3) == "220") { //wyzerowanie zegara $stopTime = time() + 10; $gotResponse = TRUE; } elseif(($line == "") AND ($gotResponse)) { break; } elseif(time() > $stopTime) { break; } } if(!$gotResponse) { //ten host nie odpowiada, //może następny będzie lepszy continue; } set_socket_blocking ($fp, TRUE); //logowanie fputs($fp, "HELO $SERVER_NAMErn"); fgets($fp, 1024); //ustawienie from fputs($fp, "MAIL FROM: <$user@$domain>rn"); fgets($fp, 1024); //próbowanie adresu fputs($fp, "RCPT TO: <$address>rn"); $line = fgets($fp, 1024); //zamknięcie połączenia fputs($fp, "QUITrn"); fclose($fp); if(substr($line, 0, 3) != "250") { //serwer pocztowy nie rozpoznaje tego adresu //zapewne jest on nieprawidłowy $error = $line; return(FALSE); } else { //adres nieznany return(TRUE); } } $error = "Nie można połączyć się z wymiennikiem poczty!"; return(FALSE); } if(verifyEmail($address, &$error)) { print("Zweryfikowany!<BR>n"); } else { print("Nie można zweryfikować adresu!<BR>n"); print("Błąd: $error<BR>n"); } ?>[/php:1:16c90898c3] |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.10.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Cytat Cytat Powinno działać...
Ale nie działa. Dlaczego tak uparcie wszyscy starają się znaleźć metodę na rozwiązanie tego, skoro dla protokołu SMTP jest to w ogólności nierozwiązalne? Jedyne na czym może bazować zewnętrzny kod sprawdzający istnienie skrzynki to odpowiedzi od serwera pocztowego. I o ile jeszcze w przypadku odpowiedzi, że skrzynki nie ma, możemy być tego pewni, to potwierdzenie przyjęcia listu nie gwarantuje w żaden sposób tego, że ona istnieje. Wysyłanie komunikatu o tym, że podany adres jest błędny to tylko i wyłącznie dobra wola administratora. Jeśli będzie chciał to nikt z zewnątrz nie odróżni istniejącego adresu od nieistniejącego. Doradzam przeczytac RCF 821 opisuje protokol SMTP, ktory jest uzywany do wymiany poczty. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ech... ja tam za bardzo w praktyce nie miałem z tym do czynienia, ale trochę się naczytałem i tak jak mówi adwol, wszystko zależy od serwera - czy to do Was kiedyś dotrze? Owszem protokół SMTP umożliwia sprawdzanie czy takie konto istnieje, ale nie zawsze jest to ustawione od strony serwera - nawet przy nie istniejącej skrzynce serwer zwróci OK...
-------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 6.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Doradzam przeczytac RCF 821 opisuje protokol SMTP, ktory jest uzywany do wymiany poczty.
Doradzam myśleć i samemu poczytać RFC2821 (który zastępuje RFC821). Cytat Servers MAY forward messages when they are aware of an address change. When they do so, they MAY either provide address-updating information with a 251 code, or may forward "silently" and return a 250 code. But, if a 251 code is used, they MUST NOT assume that the client will actually update address information or even return that information to the user.
Dodatkowo ani RFC821 ani RFC2821 nie precyzują co to znaczy ,,unknown recipient'', a tylko dla takiego przypadku jest określane działanie. W szczególności status adresata może być nieznany w momencie dialogu SMTP. Poza tym niezależnie od standardu, rozwiązanie takie jest czasami wykorzystywane np. ze względów bezpieczeństwa, a chodziło o fakty, a nie o akademickie dyskusje. Jednym słowem, wykrycie czy adres jest rzeczywiście poprawny (tj. czy dotrze do jakiegoś konkretnego, rzeczywistego adresata) może być niewykonalne (wspomniany przez Ciebie przykład -- Wirtualna Polska). |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 21.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
ale jezeli tostaniesz odpowiedz odmowna to jestes pewien ze jest niepoprawny, a to juz jest cos!
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 80 Pomógł: 0 Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie nie da sie ocenic czy dany e-mail na pewno istnieje. Przytocze tutaj maly cytat z programu GroupMail, ktory ma wlasnie opcje 'check/verify' przy kazdym z e-mailu:
Cytat Please note that this test only confirms that the Recipients email server exists and is availible to accept email
Co potwierdza to co wyzej napisaliscie. Jednak uwazam ze i to moze sie nam przydac, np. do sprawdzania czy podany przez usera email istnieje (nie daje nam 100% pewnosci, ale przeciez jesli jest bledny to nigdy nam nie zwroci ze istnieje, tak?). Mozna dzieki temu weryfikowac liste subskrybentow, dzieki czemu przy wysylce dostaniemy duzo mniej zwrotow, co pozwoli odciazyc troche serwer.. Co do przytoczonej funkcji sprawdzajacej mail, jej zrodlo mozna znalezc tutaj - http://www.zend.com/codex.php?id=449&single=1 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.10.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
...przytocze ostatni wywod. Pomimo wszystkich wysilkow niema 100% pewnosci istnienia skrzynki wszystko zalezy od admina czy chce czytac smieci czy nie to juz jego sprawa. Jednak poprawnie skonfigurowanu serwer nie powinien moim zdaniem przyjmowac takich emili i staje sie to powoli regula.I jeszcze ostatnie zdanie. Jesli mamy mozliwosci odrzucenia czesci nie prawidlowych adresow to jest juz przeciez sukces i nie wazne jak to ktos zrobi wazny jest rezultat moze 50% ,a moze 90% mniej smieci. I nie zgadzam sie z twierdzeniem nic nie rob bo to nie mozliwe. Niektorzy tez kiedys mowili skrzydla sa tylko dla bogow i co... - to byl tylko taki wywod. cze:)
-------------------- <Im więcej wiem to wiem, że mało wiem>
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 31.03.2003 Skąd: Zelów Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czesc. Moim skromnym zdaniem jest to mozliwe, a jesli chcesz sprawdzic to wejdz na strone skaytek.and.pl kliknij menu Pomoc i sprubuj wyslac maila na nie istniejącą skrzynkę pocztową i zobaczysz co się stanie
![]() Sprawdzałem weryfiację mail'a i fakt skrypt sprawdza czy istnieje serwer np. wp.pl ale istnienia maila na tym serwerze nie ma możliwości sprawdzenia. Wysyła każdy :wink: jaki komu przyjdzie na myśl. -------------------- Nigdy nie stosuję się do godzin; godziny są zrobione dla człowieka, a nie człowiek dla godzin. Francois Rabelais
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 02:49 |