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

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 18-03-14, 11:26   # 1
zoharesh
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Dec 2007
הודעות: 600

zoharesh לא מחובר  

PHP - ווידוא תקינות אימייל לפני שליחה

אהלן,
החלטתי לשתף אתכם בחלק ממחלקה שכתבתי, החלק הספציפי הזה מוודא את תקינות האימייל.
PHP קוד:
public function validAddress($addr) {
        if(
filter_var($addr,FILTER_VALIDATE_EMAIL) == false) {
            throw new 
Exception("כתובת האימייל אינה תקינה");
            return 
false;
        }
        
        
$domain substr($addr,strpos($addr,'@')+1);
        
$mxhosts $this->MXQuery($domain);
        if(
$mxhosts == false) {
            throw new 
Exception("לא נמצאו שרתי אימייל למשלוח, וודא שכתובת האימייל תקינה");
            return 
false;
        }
        
        
$ok false;
        foreach(
$mxhosts as $host) {
            if(!
$this->openSocket($host)) // open socket to mail server
                
continue;
                
            
$ok $this->checkHost($host$addr); // check email address in mail server
            
$this->closeSocket(); // close connection to mail server
            
break;
        }
        
        if(
$ok == false) {
            throw new 
Exception("שרת הדואר של הלקוח דיווח שכתובת האימייל אינה תקינה");
            return 
false;
        }
        
        return 
true;
    }

private function 
openSocket($host) {
        
// open socket to $host on port 25 (SMTP)
        // define timeout of 5 seconds
        // return false on failure or true on success
        
        
$this->sock fsockopen($host25$errno$errstr5);
        if(!
$this->sock)
            return 
false;
        
        
stream_set_timeout($this->sock5);
        return 
true;
    }
    
    private function 
closeSocket() {
        
// close open socket $this->sock
        // before fclose call nicly to "quit"
        
        
fwrite($this->sock,"quit\r\n");
        
fclose($this->sock);
    }
    
    private function 
sockMsg($msg) {
        
// send $msg to open socket ($this->sock)
        // fetch reply from $this->sock
        // return 3 first chars (supposed to be 3 digits)
        
        
fwrite($this->sock"{$msg}\r\n");
        
$reply fread($this->sock,2082);
        return 
substr($reply,0,3); // return code (3 digits)
    
}
    
    private function 
checkHost($host$addr) {
        
// do full communication with selected mail SMTP server
        // return false on failure (if we not recived wanted responses) or true otherwise
    
        
$res fread($this->sock,2082);
        if(
substr($res,0,3) != '220')
            return 
false;
        
        
// send "helo hi"
        
if($this->sockMsg("helo hi") != '250')
            return 
false;
        
        
// send "mail from"
        
if($this->sockMsg("mail from: <your@domain.com>") != '250')
            return 
false;
        
        
// send "rcpt to"
        
if($this->sockMsg("rcpt to: <{$addr}>") != '250')
            return 
false;
        
        return 
true;
    }
    
    private function 
MXQuery($domain) {
        
// do MX Query for selected domain
        // return an array of MX records of this domain
        
        
if(!getmxrr($domain,$mxhosts))
            return 
false;
        
        return 
$mxhosts;
    } 
מי שרוצה יכול להחליף את בדיקת הכתובת עצמה (התנאי הראשון) במשהו קצת יותר רציני ב-regex.

אפשר גם למיין את הmxhosts לפי העדיפות שלהם למרות שלא ממש נחוץ.

בנוסף, הפונקציה checkHosts מחזירה false במידה ולא התקבלה התוצאה הרצויה, אם מישהו רוצה הוא יכול להרחיב אותה שתחזיר בדיוק מה השגיאה שהתקבלה (נניח תיבת האימייל של המקבל מלאה, תיבת האימייל לא נמצאה וכו').

תהנו
__________________


HIGHDESIGN.co.il עיצוב ובניית אתרים.
  Reply With Quote
ישן 18-03-14, 17:47   # 2
Steve-Web
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Nov 2011
הודעות: 653

Steve-Web לא מחובר  

היי , קודם כל ממש כל הכבוד על השיתוף והבנייה,
שנית, הייתי עושה פה קצת סדר או לפחות על מנת שלא יהיו בעיות ואנשים שלא כלכך מבינים (הגולשים) יתקלו באותה שגיאה של בעיה בשרת במקום כל פעם הודעה עם פירוט כזה ואחר , ומבחינת קוד המראה היה הרבה יותר מסודר כאשר הייתי שולח לפונקציה שתדפיס את אותה שגיאה בכל פעם שנדרש .
בכל מקרה , מאוד יפה , תודה !
__________________
www.kyd.co.il,www.shiromika-lambretta.com, www.notary-attorney.co.il,www.bitilan1.com, http://funjoy.co.il/,http://djyanivo.com,
http://פסולתאלקטרונית.com/ , http://shiromika.com/, ועוד. עוסק המון בתחום אבטחת אתרים.בעלים של חברת Steve-Web ומתכנת ראשי.מתקן ומשדרג אתרים קיימים.ליצירת קשר. 0526974757-עדן.
  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. הזמן כעת הוא 00:59.

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