PDA

View Full Version : چک کردن ایمیل بابت وجود داشتن در php



billgivz
دوشنبه 20 دی 1389, 15:07 عصر
سلام من نیاز به کدی دارم که تشخیص بده ایمیل وارد شده وجود داره یا نه ؟

ببینید منظورم ریجکس نیست منظورم وجود ایمیلی که داخل دیتابیسم وارد شده .

لطفا اگه میشه مرا به گوگل رجوع ندیدن کد های زیادی هست ولی کدها کار نمیکنه

لطف کنید یک کدی که خودتوت تست کردید و اطمینان دارید کار میکنه واسم پست کنید

ممنون

mohsen6500
دوشنبه 20 دی 1389, 15:43 عصر
سلام من معمولا روش های خودم و انجام میدم و احتمالا دوستان روشهای بهتری رو سراغ دارند ولی
من این روش رو امتحان میکنم و جواب هم داده
برای اینکه تست کنی کافیه که ایمیلی رو که میخوای داخل متغییری مثلا mail$ بذاری و به دیتا بیس بگی که توی ایمیل کاربران قبلا این ایمیل وجود داشته اگر وجود داره اخطار بده که این ایمیل قبلا ثبت شده
به این شکل


//check mail
$query1 = "select * from table where mail ='$mail'";
$result1 = mysql_query($query1,$dblink);
//comment mail
if(mysql_num_rows($result1)==1)
{
echo'
<div align="center" style="font-size:11px; font-family:tahoma; color:#FF0000;">این ایمیل قبلا ثبت شده است لطفا ایمیل دیگری را انتخاب کنید<p><a href="index.php">صفحه اصلی</a><br />
</div>';
return false;
}

موفق باشی

billgivz
دوشنبه 20 دی 1389, 22:19 عصر
سلام من معمولا روش های خودم و انجام میدم و احتمالا دوستان روشهای بهتری رو سراغ دارند ولی
من این روش رو امتحان میکنم و جواب هم داده
برای اینکه تست کنی کافیه که ایمیلی رو که میخوای داخل متغییری مثلا mail$ بذاری و به دیتا بیس بگی که توی ایمیل کاربران قبلا این ایمیل وجود داشته اگر وجود داره اخطار بده که این ایمیل قبلا ثبت شده
به این شکل


//check mail
$query1 = "select * from table where mail ='$mail'";
$result1 = mysql_query($query1,$dblink);
//comment mail
if(mysql_num_rows($result1)==1)
{
echo'
<div align="center" style="font-size:11px; font-family:tahoma; color:#FF0000;">این ایمیل قبلا ثبت شده است لطفا ایمیل دیگری را انتخاب کنید<p><a href="index.php">صفحه اصلی</a><br />
</div>';
return false;
}
موفق باشی

دوست عزیز مثل اینکه منظور من رو بد فهمیدی

منظورم کدی که چک کنه ایمیل وجود داره یا نه ؟

نه داخل دیتابیس منظورم تو جی میل یا یاهو

اگه کسی در این مورد کدی داره پست کنید

billgivz
دوشنبه 20 دی 1389, 22:22 عصر
سلام من یک کدی در این زمینه پیدا کردم ولی کار نمیکنه



<?php
/**
* Validate Email Addresses Via SMTP
* This queries the SMTP server to see if the email address is accepted.
* @copyright http://creativecommons.org/licenses/by/2.0/ - Please keep this comment intact
* @author gabe@fijiwebdesign.com
* @contributers adnan@barakatdesigns.net
* @version 0.1a
*/
class SMTP_validateEmail {

/**
* PHP Socket resource to remote MTA
* @var resource $sock
*/
var $sock;

/**
* Current User being validated
*/
var $user;
/**
* Current domain where user is being validated
*/
var $domain;
/**
* List of domains to validate users on
*/
var $domains;
/**
* SMTP Port
*/
var $port = 25;
/**
* Maximum Connection Time to an MTA
*/
var $max_conn_time = 30;
/**
* Maximum time to read from socket
*/
var $max_read_time = 5;

/**
* username of sender
*/
var $from_user = 'user';
/**
* Host Name of sender
*/
var $from_domain = 'localhost';

/**
* Nameservers to use when make DNS query for MX entries
* @var Array $nameservers
*/
var $nameservers = array(
'192.168.0.1'
);

var $debug = false;

/**
* Initializes the Class
* @return SMTP_validateEmail Instance
* @param $email Array[optional] List of Emails to Validate
* @param $sender String[optional] Email of validator
*/
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);
}

/**
* Set the Emails to validate
* @param $emails Array List of Emails
*/
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;
}
}

/**
* Set the Email of the sender/validator
* @param $email String
*/
function setSenderEmail($email) {
$parts = $this->_parseEmail($email);
$this->from_user = $parts[0];
$this->from_domain = $parts[1];
}

/**
* Validate Email Addresses
* @param String $emails Emails to validate (recipient emails)
* @param String $sender Sender's Email
* @return Array Associative List of Emails and their validation results
*/
function validate($emails = false, $sender = false) {

$results = array();

if ($emails) {
$this->setEmails($emails);
}
if ($sender) {
$this->setSenderEmail($sender);
}

// query the MTAs on each Domain
foreach($this->domains as $domain=>$users) {

$mxs = array();

// retrieve SMTP Server via MX query on domain
list($hosts, $mxweights) = $this->queryMX($domain);

// retrieve MX priorities
for($n=0; $n < count($hosts); $n++){
$mxs[$hosts[$n]] = $mxweights[$n];
}
asort($mxs);

// last fallback is the original domain
array_push($mxs, $this->domain);

$this->debug(print_r($mxs, 1));

$timeout = $this->max_conn_time/count($hosts);

// try each host
while(list($host) = each($mxs)) {
// connect to SMTP server
$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;
}
}

// did we get a TCP socket
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') {
// MTA gave an error...
foreach($users as $user) {
$results[$user.'@'.$domain] = false;
}
continue;
}

// say helo
$this->send("HELO ".$this->from_domain);
// tell of sender
$this->send("MAIL FROM: <".$this->from_user.'@'.$this->from_domain.">");

// ask for each recepient on this domain
foreach($users as $user) {

// ask of recepient
$reply = $this->send("RCPT TO: <".$user.'@'.$domain.">");

// get code and msg from response
preg_match('/^([0-9]{3}) /ims', $reply, $matches);
$code = isset($matches[1]) ? $matches[1] : '';

if ($code == '250') {
// you received 250 so the email address was accepted
$results[$user.'@'.$domain] = true;
} elseif ($code == '451' || $code == '452') {
// you received 451 so the email address was greylisted (or some temporary error occured on the MTA) - so assume is ok
$results[$user.'@'.$domain] = true;
} else {
$results[$user.'@'.$domain] = false;
}

}

// 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;
}

/**
* Query DNS server for MX entries
* @return
*/
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);
}

/**
* Simple function to replicate PHP 5 behaviour. http://php.net/microtime
*/
function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

function debug($str) {
if ($this->debug) {
echo htmlentities($str);
}
}

}


// the email to validate
$email = 'boys.iran.2007@gmail.com';
// an optional sender
$sender = 'info@example.com';
// instantiate the class
$SMTP_Valid = new SMTP_validateEmail();
// do the validation
$result = $SMTP_Valid->validate($email, $sender);
// view results
var_dump($result);
echo $email.' is '.($result ? 'valid' : 'invalid')."\n";

// send email?
if ($result) {
echo "is";
}

?>

eshpilen
دوشنبه 20 دی 1389, 23:10 عصر
فکر میکنم میشه چک کرد که چنان ایمیلی واقعا وجود داره یا نه، ولی این ثابت نمیکنه که اون ایمیل واقعا به خود شخص تعلق داره. هر آدمی میتونه بینهایت آدرس معتبر ایمیل رو براحتی بدست بیاره یا حدس بزنه و وارد کنه. بنابراین برای اینکه مطمئن بشن ایمیل وارد شده واقعا به فرد موردنظر تعلق داره، از ارسال کد فعال سازی به ایمیل استفاده میکنن که طرف باید ایمیلش رو باز کنه و روی لینک فعال سازی دریافت شده کلیک کنه.
اگر هم میخواید فقط برای مطمئن شدن از اینکه طرف ایمیل خودش رو اشتباهی وارد نکنه اینهمه دردسر رو متحمل بشید، بنظرم صرف نمیکنه (میتونید بجاش از روش دوبار وارد کردن ایمیل هم استفاده کنید - البته خودم شخصا این قسمت رو همیشه کپی و پیست میکنم!!). ضمنا بعضی وقتها هم ممکنه طرف ایمیل رو اشتباه وارد کنه اما همون آدرس اشتباه هم یک آدرسی باشه که واقعا وجود داشته باشه.

billgivz
دوشنبه 20 دی 1389, 23:19 عصر
فکر میکنم میشه چک کرد که چنان ایمیلی واقعا وجود داره یا نه، ولی این ثابت نمیکنه که اون ایمیل واقعا به خود شخص تعلق داره. هر آدمی میتونه بینهایت آدرس معتبر ایمیل رو براحتی بدست بیاره یا حدس بزنه و وارد کنه. بنابراین برای اینکه مطمئن بشن ایمیل وارد شده واقعا به فرد موردنظر تعلق داره، از ارسال کد فعال سازی به ایمیل استفاده میکنن که طرف باید ایمیلش رو باز کنه و روی لینک فعال سازی دریافت شده کلیک کنه.
اگر هم میخواید فقط برای مطمئن شدن از اینکه طرف ایمیل خودش رو اشتباهی وارد نکنه اینهمه دردسر رو متحمل بشید، بنظرم صرف نمیکنه (میتونید بجاش از روش دوبار وارد کردن ایمیل هم استفاده کنید - البته خودم شخصا این قسمت رو همیشه کپی و پیست میکنم!!). ضمنا بعضی وقتها هم ممکنه طرف ایمیل رو اشتباه وارد کنه اما همون آدرس اشتباه هم یک آدرسی باشه که واقعا وجود داشته باشه.

کسی نیست در مورد کد بالا نظری داشته باشه !

UnnamE
سه شنبه 21 دی 1389, 02:38 صبح
اكثر كدهاي email validate كه چك بشه در ديتابيس سايت هاي سرويس دهنده وجود دارن يا نه، يه جورايي يا سيستم عامل ويندوز كار نميكنن
بخاطر همين هست ممكن كد بالا كار نكنه واست
كلاس هاي فرامورك زند خيلي بدرد ميخورن ميتوني ازشون استفاده كني
توي داكيومنت سايت رسمي Zend Framework يه سرچ كوچولو بكني با مثال بهت تحويل ميده!

shahriyar3
سه شنبه 21 دی 1389, 16:14 عصر
برای فهمیدن اینکه آیا ایمیل وجود داره یا نه باید یک درگاه دریافت و ارسال ایمیل بنویسید و اونجا وضعیت delivery میل را چک کنید .
این کدی که گذاشتین چه اروری میده؟
قبل از اجراش باید سرور smtp رو فعال کنی.

billgivz
سه شنبه 21 دی 1389, 22:13 عصر
برای فهمیدن اینکه آیا ایمیل وجود داره یا نه باید یک درگاه دریافت و ارسال ایمیل بنویسید و اونجا وضعیت delivery میل را چک کنید .
این کدی که گذاشتین چه اروری میده؟
قبل از اجراش باید سرور smtp رو فعال کنی.


Warning: Invalid argument supplied for foreach() in /home/hamysal/public_html/test.php on line 89

Warning: Invalid argument supplied for foreach() in /home/hamysal/public_html/test.php on line 126
array(0) { } boys.iran.2007@gmail.com is invalid

shahriyar3
سه شنبه 21 دی 1389, 22:26 عصر
Warning: Invalid argument supplied for foreach() in /home/hamysal/public_html/test.php on line 89

Warning: Invalid argument supplied for foreach() in /home/hamysal/public_html/test.php on line 126
array(0) { } boys.iran.2007@gmail.com is invalid
دوست عزیز
این ارور هائی که شما گذاشتین خطا های سینکس برنامه است
یعنی شما برای foreach از متغیری استفاده کردید که قبلا تعریف نشده مقدارش یا آرایه
این اسکریپت صفحات دیگه ای داره که من حدس میزنم این آرگومان ها اونجا مقدار دهی میشه

shahriyar3
سه شنبه 21 دی 1389, 23:01 عصر
دوست عزیز
اون کد براتون اصلاح کردم دیگه ارور های قبلی رو نمیده
ولی 2 تا فایل توی برنامه require شده که باید کنار این فایل باشه و گرنه باز ارور میده در غیر اینصورت من ارور دیگه ای ندیدم:چشمک: