הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 11-01-08, 22:29   # 1
-roee-
חבר על
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
מיקום: IL
הודעות: 864

-roee- לא מחובר  

[PHP] מדריך לאימות דואר אלקטרוני (יותר מביטוי רגולרי פשוט)

היי,

למעשה בימים האחרונים פנו אלי אנשים שונים ובקשו ממני לעזור להם לשפר את המערכות שהם בנו מבחינת "אבטחה" או איך נקרא לזה - "התחכמות".

אז החלטתי לתת לכם את הפונקציה האישית שלי אשר עובדת במערכות שבניתי.
הפונקציה בעצם מקבלת מחרוזת ומבצעת פעולה שימושית מאוד, בודקת האם המחרוזת היא דואר אלקטרוני תקינה אלא שבנוסף לבדיקה הרגילה של הביטוי הרגולרי, הפונקציה מנסה ליצור קשר עם השרת ולוודא שאכן הוא קיים.
היתרון הענקי של הפונקציה זה הוא שהיא לא משתמשת ב-fsockopen אלא ב-gethostbyname פשוט.

PHP קוד:
// נכתב על ידי רועי נוי
// http://www.roeenoy.com
function check_email$email )

    
$email htmlspecialchars stripslashes strip_tags $email ) ) , ENT_QUOTES );
    if ( 
eregi ('^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$'$email ) )
    {
        
$domain explode('@'$email ) ;
        
$domain_ip gethostbyname($domain[1]);
        if( 
$domain[1] != $domain_ip )
        {
            return 
true;
        }else {
            return 
false;
        }
    } else {
        return 
false;
    }

לא נראה לי שיש פה יותר מדי מה להסביר, כל אחד יכול להבין את הקוד הפשוט הזה.

על מנת להשתמש בפונקציה יש כמובן לכתוב כך:
PHP קוד:
if( check_email("my_username@yahoo.com") )
    echo 
"<font color=green>Correct Email Address</font>";
else
    echo 
"<font color=red>Wrong Email Address</font>"
מה ניתן לומר עוד?
זוהי פונקציה שימושית מאוד ואני ממליץ מקרב לב להשתמש בה.
__________________
בברכה,
רועי
  Reply With Quote
ישן 11-01-08, 23:17   # 2
meshuga
הנהלת הפורום לשעבר
 
meshuga's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 7,601

meshuga לא מחובר  

ציטוט:
נכתב במקור על ידי roeenoy צפה בהודעה
היי,

למעשה בימים האחרונים פנו אלי אנשים שונים ובקשו ממני לעזור להם לשפר את המערכות שהם בנו מבחינת "אבטחה" או איך נקרא לזה - "התחכמות".

אז החלטתי לתת לכם את הפונקציה האישית שלי אשר עובדת במערכות שבניתי.
הפונקציה בעצם מקבלת מחרוזת ומבצעת פעולה שימושית מאוד, בודקת האם המחרוזת היא דואר אלקטרוני תקינה אלא שבנוסף לבדיקה הרגילה של הביטוי הרגולרי, הפונקציה מנסה ליצור קשר עם השרת ולוודא שאכן הוא קיים.
היתרון הענקי של הפונקציה זה הוא שהיא לא משתמשת ב-fsockopen אלא ב-gethostbyname פשוט.

PHP קוד:
// נכתב על ידי רועי נוי
// http://www.roeenoy.com
function check_email$email )

    
$email htmlspecialchars stripslashes strip_tags $email ) ) , ENT_QUOTES );
    if ( 
eregi ('^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$'$email ) )
    {
        
$domain explode('@'$email ) ;
        
$domain_ip gethostbyname($domain[1]);
        if( 
$domain[1] != $domain_ip )
        {
            return 
true;
        }else {
            return 
false;
        }
    } else {
        return 
false;
    }

לא נראה לי שיש פה יותר מדי מה להסביר, כל אחד יכול להבין את הקוד הפשוט הזה.

על מנת להשתמש בפונקציה יש כמובן לכתוב כך:
PHP קוד:
if( check_email("my_username@yahoo.com") )
    echo 
"<font color=green>Correct Email Address</font>";
else
    echo 
"<font color=red>Wrong Email Address</font>"
מה ניתן לומר עוד?
זוהי פונקציה שימושית מאוד ואני ממליץ מקרב לב להשתמש בה.
לא רואה ממש "היגיון", זה לא בודק אם המייל קיים, זה רק בודק אם הדומיין קיים...על שרת כלשהו.

אולי פשוט נישאר עם הדבר הפשוט והטוב, ביטוי רגולרי ושליחת אימות..

בכל זאת. קבל ח"ח..מי שיראה את זה כשימושי...בכיף.
  Reply With Quote
ישן 12-01-08, 09:32   # 3
-roee-
חבר על
 
מיני פרופיל
תאריך הצטרפות: Nov 2005
מיקום: IL
הודעות: 864

-roee- לא מחובר  

ציטוט:
נכתב במקור על ידי meshuga צפה בהודעה
לא רואה ממש "היגיון", זה לא בודק אם המייל קיים, זה רק בודק אם הדומיין קיים...על שרת כלשהו.

אולי פשוט נישאר עם הדבר הפשוט והטוב, ביטוי רגולרי ושליחת אימות..

בכל זאת. קבל ח"ח..מי שיראה את זה כשימושי...בכיף.
אין ספק שכל מה שאמרת נכון במאה האחוזים.
פשוט זה יהפוך את כל המקומות שבהם אמורים להכניס אימייל באתר שלכם ליותר יפים.
במקום שמישהו יחרבש asa@adfas.sf לפחות הוא ישקיע מחשבה ויתן למנהל האתר אשלייה שזוהי באמת כתובתו האמיתית: asa@yahoo.com
__________________
בברכה,
רועי
  Reply With Quote
ישן 12-01-08, 10:33   # 4
meshuga
הנהלת הפורום לשעבר
 
meshuga's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 7,601

meshuga לא מחובר  

ציטוט:
נכתב במקור על ידי roeenoy צפה בהודעה
אין ספק שכל מה שאמרת נכון במאה האחוזים.
פשוט זה יהפוך את כל המקומות שבהם אמורים להכניס אימייל באתר שלכם ליותר יפים.
במקום שמישהו יחרבש asa@adfas.sf לפחות הוא ישקיע מחשבה ויתן למנהל האתר אשלייה שזוהי באמת כתובתו האמיתית: asa@yahoo.com
מסכים, כמו שאמרתי. זה יכול להיות שימושי במקרים מסויימים...למשל..רשימת תפוצה..להקל על המסד נתונים ולא להכניס כל שטות אז לפחות לבדוק שהשרת קיים..מקובל..אבל במקרים כמו הרשמה. זה מיותר.
  Reply With Quote
ישן 12-01-08, 11:56   # 5
Daniel
אחראי פורום
 
מיני פרופיל
תאריך הצטרפות: Mar 2007
הודעות: 2,875

Daniel לא מחובר  

פונקצייה שגם באמת בודקת יותר דברים, מצאתי ברשת,

PHP קוד:
    function checkEmail($email$chFail false)
    {
        
$msgs = Array();
        
$msgs[] = 'Received email address: ' $email;
        
// check for email pattern (adapted and improved from http://karmak.org/archive/2003/02/validemail.html)
        // incorrectly allows IP addresses with block numbers > 256, but those will fail to create sockets anyway
        // unicode norwegian chars cannot be used: C caron, D stroke, ENG, N acute, S caron, T stroke, Z caron (PHP unicode limitation)
        
if (!preg_match("/^(([^<>()[\]\\\\.,;:\s@\"]+(\.[^<>()[\]\\\\.,;:\s@\"]+)*)|(\"([^\"\\\\\r]|(\\\\[\w\W]))*\"))@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([a-z\-0-9????????????????]+\.)+[a-z]{2,}))$/i"$email)) {
            
$msgs[] = 'Email address was not recognised as a valid email pattern';
            return 
$chFail ? Array(false$msgs) : false;
        }
        
$msgs[] = 'Email address was recognised as a valid email pattern';
        
// get the mx host name
        
if (preg_match("/@\[[\d.]*\]$/"$email)) {
            
$mxHost[0] = preg_replace("/[\w\W]*@\[([\d.]+)\]$/""$1"$email);
            
$msgs[] = 'Email address contained IP address ' $mxHost[0] . ' - no need for MX lookup';
        } else {
            
// get all mx servers - if no MX records, assume domain is MX (SMTP RFC)
            
$domain preg_replace("/^[\w\W]*@([^@]*)$/i""$1"$email);
            if (!
getmxrr($domain$mxHost$weightings)) {
                
$mxHost[0] = $domain;
                
$msgs[] = 'Failed to obtain MX records, defaulting to ' $domain ' as specified by SMTP protocol';
            } else {
                
array_multisort($weightings$mxHost);
                
$cnt '';
                
$co 0;
                foreach(
$mxHost as $ch) {
                    
$cnt .= ($cnt ', ' '') . $ch ' (' $weightings[$co] . ')';
                    
$co++;
                }
                
$msgs[] = 'Obtained the following MX records for ' $domain ': ' $cnt;
            }
        }
        
// check each server until you are given permission to connect, then check only that one server
        
foreach($mxHost as $currentHost) {
            
$msgs[] = 'Checking MX server: ' $currentHost;
            if (
$connection fsockopen($currentHost25)) {
                
$msgs[] = 'Created socket (' $connection ') to ' $currentHost;
                if (
preg_match("/^2\d\d/"$cn fgets($connection1024))) {
                    
$msgs[] = $currentHost ' sent SMTP connection header - no futher MX servers will be checked: ' $cn;
                    while (
preg_match("/^2\d\d-/"$cn)) {
                        
$cn fgets($connection1024);
                        
$msgs[] = $currentHost ' sent extra connection header: ' $cn;
                    } 
//throw away any extra rubbish
                    
if (!$_SERVER) {
                        global 
$HTTP_SERVER_VARS;
                        
$_SERVER $HTTP_SERVER_VARS;
                    }
                    
// attempt to send an email from the user to themselves (not <> as some misconfigured servers reject it)
                    
$localHostIP gethostbyname(preg_replace("/^.*@|:.*$/"''$_SERVER['HTTP_HOST']));
                    
$localHostName gethostbyaddr($localHostIP);
                    
fputs($connection'HELO ' . ($localHostName?$localHostName:('[' $localHostIP ']')) . "\r\n");
                    if (
$success preg_match("/^2\d\d/"$hl fgets($connection1024))) {
                        
$msgs[] = $currentHost ' sent HELO response: ' $hl;
                        
fputs($connection"MAIL FROM: <$email>\r\n");
                        if (
$success preg_match("/^2\d\d/"$from fgets($connection1024))) {
                            
$msgs[] = $currentHost ' sent MAIL FROM response: ' $from;
                            
fputs($connection"RCPT TO: <$email>\r\n");
                            if (
$success preg_match("/^2\d\d/"$to fgets($connection1024))) {
                                
$msgs[] = $currentHost ' sent RCPT TO response: ' $to;
                            } else {
                                
$msgs[] = $currentHost ' rejected recipient: ' $to;
                            }
                        } else {
                            
$msgs[] = $currentHost ' rejected MAIL FROM: ' $from;
                        }
                    } else {
                        
$msgs[] = $currentHost ' rejected HELO: ' $hl;
                    }
                    
fputs($connection"QUIT\r\n");
                    
fgets($connection1024);
                    
fclose($connection);
                    
// see if the transaction was permitted (i.e. does that email address exist)
                    
$msgs[] = $success ? ('Email address was accepted by ' $currentHost) : ('Email address was rejected by ' $currentHost);
                    return 
$chFail ? Array($success$msgs) : $success;
                } elseif (
preg_match("/^550/"$cn)) {
                    
$msgs[] = 'Mail domain denies connections from this host - no futher MX servers will be checked: ' $cn;
                    return 
$chFail ? Array(false$msgs) : false;
                } else {
                    
$msgs[] = $currentHost ' did not send SMTP connection header: ' $cn;
                }
            } else {
                
$msgs[] = 'Failed to create socket to ' $currentHost;
            }
        }
        
$msgs[] = 'Could not establish SMTP session with any MX servers';
        return 
$chFail ? Array(false$msgs) : false;
    } 
  Reply With Quote
ישן 12-01-08, 14:11   # 6
ViPeRt
חבר מתקדם
 
ViPeRt's Avatar
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
מיקום: איזור המרכז
גיל: 36
הודעות: 632
שלח הודעה באמצעות ICO אל ViPeRt שלח הודעה באמצעות MSN אל ViPeRt

ViPeRt לא מחובר  

בדקתי את הסקריפט הוא באמת עובד...

הזמן שלוקח לו:
* 0.253848 sec
__________________
תומר, מתכנת אתרים מקצועי ב PHP

קיצור כתובת אתרים בחינם Katzr.Net





Last edited by ViPeRt; 12-01-08 at 14:25..
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 09:37.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ