2013-06-27 5 views
0

https://github.com/zytzagoo/smtp-validate-email/blob/master/smtp-validate-email.php 약간의 수정과 함께 메일 주소의 존재를 확인하는SMTP - 검증 - 이메일 catch되지 않은 예외 'SMTP_Validate_Email_Exception_Timeout'


<?php 

require('smtp-validate-email.php'); 

$from = 'removed'; // for SMTP FROM:<> command 
$con = mysql_connect('localhost', 'root', ''); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db('mailverf', $con); 

$sql="SELECT * 
FROM `mailvalid` where statut=0 limit 0,30"; 

$result = mysql_query($sql); 
if($result === FALSE) { 
    die(mysql_error()); 

    while($row = mysql_fetch_array($result)) 
    { 

     $email = $row['mail']; 

     $validator = new SMTP_Validate_Email($email, $from); 
     $smtp_results = $validator->validate(); 
     $mail=str_replace(' ','',$row['mail']); 
     // var_dump($smtp_results); 
     if($smtp_results[$email]) 
     { 
      $sql1="UPDATE mailvalid SET statut = 1 WHERE id =".$row['id'].""; 
      mysql_query($sql1) or die(mysql_error()); 
     } 
     else 
     { 

      $sql2="INSERT INTO mailnonvalid (mail) VALUES ('".$row['mail']."')"; 
      mysql_query($sql2) or die(mysql_error()); 

      $sql3="DELETE FROM mailvalid WHERE id = ".$row['id'].""; 
      mysql_query($sql3) or die(mysql_error()); 
     } 
     // var_dump($email); 
     echo $row['id'].'</br>'; 
    } 

    $sql="SELECT * 
    FROM `mailvalid` where statut=0 limit 0,30"; 

    $result = mysql_query($sql); 
    if($result === FALSE) { 
     die(mysql_error()); 
    } 

    if($row = mysql_fetch_array($result)){ 
     echo '<script>window.location.reload(); </script>';}else {echo 'end';} 
    } 
} 

?> 

그것이 약간의 시간이 오류가 발생한 후 것을 제외하고, 작동 좋다 라는 메시지가 표시됩니다.

Fatal error: Uncaught exception 'SMTP_Validate_Email_Exception_Timeout' with message 'Timed out in recv' in C: \ xampp \ htdocs \ verif \ smtp-validate-email.php: 626 
Stack trace: 
# 0 C: \ xampp \ htdocs \ verif \ smtp -validate-email.php (650) SMTP_Validate_Email-> recv (3) 
# 1 C: \ xampp \ htdocs \ verif \ smtp-validate-email.php (554) SMTP_Validate_Email-> expect (Array, 3) 
# 2 C: \ xampp \ htdocs \ verif \ smtp-validate-email.php (311) SMTP_Validate_Email-> rset() 
# 3 C: \ xampp \ htdocs \ verif \ index.php (28): SMTP_Validate_Email-> validate() 
# 4 {main} thrown in C: \ xampp \ htdocs \ verif \ smtp-validate-email.php on line 626 

답변

1

전자 메일 주소를 가져 와서 해당 도메인과 관련된 MX 레코드를 조회 한 다음 해당 도메인과 관련된 SMTP 서버에 연결하고 전자 메일 주소가 유효한지 묻습니다.

요청되는 서버가 응답하지 않기 때문에 현재 오류가 표시됩니다.

몇 가지 이유가있을 수 있습니다. 서버가 작동하지 않을 수도 있고 이메일 주소가 넌센스 일 수도 있고 도메인이 전혀 존재하지 않을 수도 있습니다.

만약 나 였다면 try catch에 유효성 검사를 감쌀 것이고 'SMTP_Validate_Email_Exception_Timeout'오류가 발생하면 그 주소를 잠재적으로 실제가 아닌 것으로 플래그를 지정합니다. 그런 다음 나중에 언젠가는 다시 가서 주소를 다시 확인할 수 있는지 확인합니다.

수정

아래 질문에 대한 답변입니다.

이 당신의 while 루프에서 당신이 가지고있는 코드를 교체 시도 할 수 :

$email = $row['mail']; 

$validator = new SMTP_Validate_Email($email, $from); 
$emailError = false; 

    try 
    { 
     $smtp_results = $validator->validate(); 
    } 
    catch (Exception $e) 
    { 
     $emailError = true; 
    } 

    $mail=str_replace(' ','',$row['mail']); 
    // var_dump($smtp_results); 
    if($smtp_results[$email] && !$emailError) 
    { 
     $sql1="UPDATE mailvalid SET statut = 1 WHERE id =".$row['id'].""; 
     mysql_query($sql1) or die(mysql_error()); 
    } 
    else 
    { 
     $emailError = false; 
     $sql2="INSERT INTO mailnonvalid (mail) VALUES ('".$row['mail']."')"; 
     mysql_query($sql2) or die(mysql_error()); 

     $sql3="DELETE FROM mailvalid WHERE id = ".$row['id'].""; 
     mysql_query($sql3) or die(mysql_error()); 
    } 
    // var_dump($email); 
    echo $row['id'].'</br>'; 

를 이제 그것이 $의 smtp_results에없는 것처럼 이메일 주소를 처리합니다 오류가 안타.

시도해보십시오.

+0

이 오류를 발견 할 때,이 이메일 주소를 삭제하고 괜찮은지 어떤지 연속 분석은 위를 확인하고 볼 수 – user2516844

+0

것을 그 수를 – Jerryf

+0

예 그것은 아주 잘 작동합니다. 감사합니다. – user2516844

0

당신이 있기 때문에 그것을 무시하는 것이 가장 위치 :

  1. 는 SMTP - 검증 - 이메일 클래스는 여러 이메일 주소에 걸릴 수 있으며, 그 중 하나가 오류를 걷어차 수 있습니다.
  2. 도메인에 여러 개의 SMTP 서버가있는 경우 (예 : Gmail 주소는 여러 개의 SMTP 서버를 참조 할 수 있습니다. 약 8 개가 발생합니다) 주소 하나만 확인하면됩니다. 클래스가 정말로 확인합니다.
그것은 클래스 자체에서 해결되어야 할 것이다

...

관련 문제