Mailinglisten-Archive |
hy Martin,
Am 14 August 2001 um 14:42 schrieben Sie:
PM> Hi, ich habe einmal gehoert, dass man eine e-mail-Adresse daraufhin checken
PM> kann, ob es den pop-server gibt und auf dem Server den angegebenen
PM> account-namen. Weiss jemand, wie man das macht?
PM> Danke! Martin
habe mir vorgestern irgendwo das script runtergeladen..
hier isses.. ich hoffe damit kommst Du weiter..
//___________________________________________________________________________-
<?
/* $Id: chk_mail.php3,v 1.10 2001/02/22 14:43:38 ele Exp $ */
/*
* check_mail: PHP-function for checking an email-address
* Copyright (C) 2001 Gabriele Kayser <k_(at)_yser.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* GPL is found at:
* http://www.gnu.org/copyleft/gpl.html
*
* Usage: check_email($email,$HTTP_SERVER_VARS[SERVER_NAME])
* Returnvalues: array($message,$success,$server_answer)
* Message: reason for failure or empty
* Success: 0 = failed, no MX-Record for Domain;
* -1 = failed;
* 1 = success
* Server Answer: only if exists
*
*
*/
// ------------------------------------------------------------------------
function check_email($email,$sender_domain) {
list ($user, $domain) = split ( "_(at)_", $email, 2);
$sender = "info_(at)_" .$sender_domain;
$success = -1;
$connect_success = "";
$connect_out = "";
$server_answer = "";
/* returnmessages */
$dns_failed = "Ihre e-Mail Adresse ist nicht korrekt!<br>\nEs konnte kein Mailserver für <font color='#ff0000'><b>$domain</b></font> gefunden werden.<br>\nBitte überprüfen Sie Ihre Eingabe - ggf. setzen Sie sich bitte mit Ihrem Systemadministrator in Verbindung<br>\n";
$connect_failed = "Kein Mailserver für <b>$email</b> erreichbar<br>\nIhre e-Mail Adresse konnte nicht überprüft werden<br>\n";
$helo_failed = "HELO ". $sender_domain ." failed";
$from_failed = "MAIL FROM: ". $sender ." failed";
$rcpt_failed = "Der Benutzer <font color='#ff0000'><b>".$user."</b></font> ist bei <b>$domain unbekannt</b>!<br>\nBitte überprüfen Sie Ihre Eingabe.
";
/* exists mxrr for $domain */
if (!getmxrr($domain,$mxhosts,$weight)) {
$message = $dns_failed;
$success = 0;
} else {
$i = 0; /* order mxhosts by weightness */
while ($i < sizeof($mxhosts)) {
$hosts[$weight[$i]][$i] = $mxhosts[$i];
// print "<!-- $i: $weight[$i] * $mxhosts[$i] -->\n";flush();
$i++;
}
ksort($hosts);
$h = 0;
$i = 0;
while (list($key,$value) = each($hosts)) {
$mxhosts[$i] = $value;
$weight[$i] = $key;
while (list($key_name,$hostname) = each($mxhosts[$i])) {
// print "<!-- $i-$h: $key_name: $weight[$i] * $hostname -->\n";flush();
$mx_sorted[$h] = $hostname;
$weight_sorted[$h] = $weight[$i];
$h++;
}
$i++;
}
$mxhosts = $mx_sorted;
$weight = $weight_sorted;
unset($weight_sorted);
unset($mx_sorted);
unset($hosts); /* end order mxhosts by weightness */
/* connect */
for ($i = 0; ($i < count ($mxhosts) && $connect_success <> 1); $i++) {
$smtp_socket = fsockopen ($mxhosts[$i], 25);
print "<!-- Ask-$i: $mxhosts[$i] * $weight[$i] -->\n";flush();
/* SMTP-Socket open */
if ($smtp_socket) { /* ----------------------------------------------- SMTP-Socket */
print "<!-- Socket $smtp_socket open -->\n";flush();
$s = 0;
$c = 0;
$out = "";
socket_set_blocking ($smtp_socket, false);
do {
$out = fgets ($smtp_socket, 2500);
if (ereg ( "^220", $out)) {
print "<!-- S:$s C:$c OUT: $out -->\n";flush();
$connect_out = $out;
$s = 0;
$out = "";
$c++;
} elseif (($c > 0) && ($out == "")) {
break;
} else {
$s++;
}
if ($s == 99999) {
break;
}
} while ($out == "");
if (!ereg("^220",$connect_out)) {
print "<!-- No Connection to $mxhosts[$i] ($connect_out) -->\n"; flush();
$message = $connect_failed;
$server_answer = htmlentities($connect_out);
fclose($smtp_socket);
} else { /* start communication ---------------------------------- HELO */
$connect_success = 1;
socket_set_blocking ($smtp_socket, true);
$helo_success = 0;
fputs ($smtp_socket, "HELO $sender_domain\r\n");
$z = 0;
$helo_output = fgets ($smtp_socket, 2000);
if (ereg("^250",$helo_output)) { $helo_success = 1; }
print "<!-- $z: HELO SENT: $sender_domain -->\n";flush();
print "<!-- $z: HELO GET: $helo_output -->\n";flush();
socket_set_blocking ($smtp_socket, false);
do {
$helo_output = fgets ($smtp_socket, 2000);
$z++;
print "<!-- $z: HELO GET: $helo_output -->\n";flush();
if ($z > 10) { break; }
} while (ereg("^[a-zA-Z0-9]",$helo_output)); /* ------------ end HELO */
socket_set_blocking ($smtp_socket, true);
if ($helo_success == 1) { /* ------------- helo_success => MAIL FROM */
fputs ($smtp_socket,"MAIL FROM: <". $sender .">\r\n");
$from_output = fgets ($smtp_socket, 2000);
print "<!-- MAIL FROM SENT: <$sender> -->\n";flush();
print "<!-- MAIL FROM GET: $from_output -->\n";flush();
if (ereg("^250",$from_output)) { /* from_success => RCPT TO */
fputs ($smtp_socket, "RCPT TO: <$email>\r\n");
$rcpt_output = fgets ($smtp_socket, 2000);
print "<!-- RCPT TO SENT: <$email> -->\n"; flush();
print "<!-- RCPT TO GET: ". htmlentities($rcpt_output) ." -->\n";flush();
if (ereg("^250",$rcpt_output)) {
$success = 1;
$message = "";
} else {
$message = $rcpt_failed;
$server_answer = htmlentities($rcpt_output);
}
} else { /* ---------------------- end from_success RCPT TO */
$message = $from_failed;
$server_answer = htmlentities($from_output);
} /* end if (ereg("^250",$from_output) ------------- MAIL FROM */
} else {
$message = $helo_failed;
$server_answer = htmlentities($helo_output);
} /* end if $helo_success */
} /* end if ^220 $connect_out */
print "<!-- Send: QUIT -->\n";
fputs($smtp_socket,"QUIT\r\n");
print "<!-- Close $smtp_socket -->\n";
fclose($smtp_socket);
} /* end if smtp_socket open ----------------------------------------- SMTP-Socket */
} /* end for connect $mxhosts[$i] */
} /* end exists mxrr for $domain */
return array($message,$success,$server_answer);
}
?>
//-------------------------------------------
hoffe das hilft
ciao
Alex
mailto:andiamo_(at)_hessenkamp.de
php::bar PHP Wiki - Listenarchive