|
PHP smtp mail adresi doğrulama (e-mail address verifier) - PHP Webmaster bilgi bankası, knowledge base Webmaster Araçları
AnaSayfa > PHP > PHP smtp mail adresi doğrulama (e-mail address verifier) |
| Kategori | : PHP | Gönderen | : Admin | Tarih | : 2009-05-29 | Puan | : 2 | Katılımcı : 4 | Okunma | : 5893 | | | |
| | Bu class, email adresi
domainın geçerli olup olmadığını ve
email server üzerinde bu email kullanıcısının var olup olmadığını kontrol eder.
class içinde $port=25 olarak atanmıştır.
yahoo,gmail,hotmail,msn gibi email serverlar
farklı portlar kullanabildiğinden porta atanan değeri değiştirmeniz gerekebilir.
smtp_validateEmail.class.php adlı dosyaya aşağıdaki class ı ekleyiniz
<?php
class SMTP_validateEmail {
var $sock;
var $user;
var $domain;
var $domains;
var $port = 25;
var $max_conn_time = 30;
var $max_read_time = 5;
var $from_user = 'user';
var $from_domain = 'localhost';
var $nameservers = array(
'192.168.0.1'
);
var $debug = false;
function SMTP_validateEmail($emails = false, $sender = false) {
if ($emails) {
$this->setEmails($emails);
}
if ($sender) {
$this->setSenderEmail($sender);
}
}
function _parseEmail($email) {
$parts = explode('@', $email);
$domain = array_pop($parts);
$user= implode('@', $parts);
return array($user, $domain);
}
function setEmails($emails) {
foreach($emails as $email) {
list($user, $domain) = $this->_parseEmail($email);
if (!isset($this->domains[$domain])) {
$this->domains[$domain] = array();
}
$this->domains[$domain][] = $user;
}
}
function setSenderEmail($email) {
$parts = $this->_parseEmail($email);
$this->from_user = $parts[0];
$this->from_domain = $parts[1];
}
function validate($emails = false, $sender = false) {
$results = array();
if ($emails) {
$this->setEmails($emails);
}
if ($sender) {
$this->setSenderEmail($sender);
}
foreach($this->domains as $domain=>$users) {
$mxs = array();
$this->domain = $domain;
list($hosts, $mxweights) = $this->queryMX($domain);
for($n=0; $n < count($hosts); $n++){
$mxs[$hosts[$n]] = $mxweights[$n];
}
asort($mxs);
$mxs[$this->domain] = 0;
$this->debug(print_r($mxs, 1));
$timeout = $this->max_conn_time;
while(list($host) = each($mxs)) {
$this->debug("try $host:$this->port\n");
if ($this->sock = fsockopen($host, $this->port, $errno, $errstr, (float) $timeout)) {
stream_set_timeout($this->sock, $this->max_read_time);
break;
}
}
if ($this->sock) {
$reply = fread($this->sock, 2082);
$this->debug("<<<\n$reply");
preg_match('/^([0-9]{3}) /ims', $reply, $matches);
$code = isset($matches[1]) ? $matches[1] : '';
if($code != '220') {
foreach($users as $user) {
$results[$user.'@'.$domain] = false;
}
continue;
}
$this->send("HELO ".$this->from_domain);
$this->send("MAIL FROM: <".$this->from_user.'@'.$this->from_domain.">");
foreach($users as $user) {
$reply = $this->send("RCPT TO: <".$user.'@'.$domain.">");
preg_match('/^([0-9]{3}) /ims', $reply, $matches);
$code = isset($matches[1]) ? $matches[1] : '';
if ($code == '250') {
$results[$user.'@'.$domain] = true;
} elseif ($code == '451' || $code == '452') {
$results[$user.'@'.$domain] = true;
} else {
$results[$user.'@'.$domain] = false;
}
}
// reset before quit
$this->send("RSET");
// quit
$this->send("quit");
// close socket
fclose($this->sock);
}
}
return $results;
}
function send($msg) {
fwrite($this->sock, $msg."\r\n");
$reply = fread($this->sock, 2082);
$this->debug(">>>\n$msg\n");
$this->debug("<<<\n$reply");
return $reply;
}
function queryMX($domain) {
$hosts = array();
$mxweights = array();
if (function_exists('getmxrr')) {
getmxrr($domain, $hosts, $mxweights);
} else {
// windows, we need Net_DNS
require_once 'Net/DNS.php';
$resolver = new Net_DNS_Resolver();
$resolver->debug = $this->debug;
// nameservers to query
$resolver->nameservers = $this->nameservers;
$resp = $resolver->query($domain, 'MX');
if ($resp) {
foreach($resp->answer as $answer) {
$hosts[] = $answer->exchange;
$mxweights[] = $answer->preference;
}
}
}
return array($hosts, $mxweights);
}
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function debug($str) {
if ($this->debug) {
echo '<pre>'.htmlentities($str).'</pre>';
}
}
}
?>
örnek sayfa kodu
<?php
require_once('smtp_validateEmail.class.php');
$email = 'info@otelreferans.com';
$sender = 'bpatron@codekodu.com';
$SMTP_Validator = new SMTP_validateEmail();
$SMTP_Validator->debug = true;
$results = $SMTP_Validator->validate(array($email), $sender);
echo $email.' is '.($results[$email] ? 'valid' : 'invalid')."\n";
if ($results[$email]) {
mail($email, 'Confirm Email', 'Please reply to this email to confirm', 'From:'.$sender."\r\n"); // send email
} else {
echo 'The email addresses you entered is not valid';
}
?>
|
Yorumlar | Henüz Kimse Yorum Yapmamış, ilk yorumu siz ekleyin! | Yorum Ekleme Aparatı | Yorum Eklemek için lütfen sol menuden giris yapınız.. | Toplam 0 yorum listelendi. |
|