<?php
# überprüft via SMTP mittels VRFY-Kommando oder
# durch einen angetäuschten EMail-Versand, ob die
# Adresse von dem entsprechenden Mailserver
# akzeptiert wird
#
function check_email($email) {
$result = false;
if (preg_email($email)) {
#-- email-Adresse in $user und $domain aufsplitten
list($user, $domain) = explode('@', $email);
#-- die MX-Server für $domain bestimmen
getmxrr($domain, $mx_servers);
$mx_servers[] = $domain;
foreach ($mx_servers as $smtp_server) {
#-- mit SMTP-Server verbinden
if (! $result)
if ($socket = fsockopen($smtp_server, 25)) {
#-- warten auf SMTP ready
socket_set_blocking($socket, false);
$loop = 0;
while (! preg_match('/^220[ ]/', fgets($socket, 2048)))
{ #-- Schleife, weil anfangs SMTP-Datemmüll kommen kann
if ($loop++ > 19999) { fclose($socket); break 2; }
}
#-- Proto
socket_set_blocking($socket, true);
socket_command($socket, "HELO www.example.com\r\n");
if (! ($result = preg_match('/^25/',
socket_command($socket, "VRFY {$user}\r\n"))))
{
socket_command($socket, "MAIL FROM:trash@example.com\r\n");
$result = preg_match('/^25/',
socket_command($socket, "RCPT TO:<{$email}>\r\n"));
}
#-- SMTP-Verbindung beenden
fputs($socket, "QUIT\r\n");
fclose($socket);
}#if($socket)
}#foreach($mx_servers)
##if(getmxrr)
}#if(preg_email)
return($result);
}
if (! function_exists("socket_command")) {
function socket_command($socket, $cmd) {
fputs($socket, $cmd);
$result = fgets($socket, 2048);
// DEBUG("$cmd$result", "SOCKETCMD_");
return($result);
}
}
# --------------------------------------------------------------------
# überprüft die Schreibweise / den Aufbau der email-Adresse
#
function preg_email($string) {
$chars = '[-_%+&#*äöüÄÖÜßa-zA-Z0-9]+';
if (preg_match("/^({$chars}[.]*)+@+$/i", $string)) {
return(true);
} else echo "NPM($string)";
}
?>