Snippets

Idoenk . Heri Purnomo Email Validity Checker

Created by Idoenk . Heri Purnomo last modified
foo@example.com,bar@yahoo.com,user@example.com
<?php

include_once("helper.php");

$data_email_fn = 'bulk_of_emails.csv';
$email_from = 'sender@example.com';

$mailhost_cache = array();

// result
$email_valid = array();
$email_not_valid = array();
$row = 1;
if( ($fh = fopen($data_email_fn, "r")) !== FALSE ){
  while( ($row = fgetcsv($fh, 1000, ",")) !== FALSE ){
    $email = (!empty($row[0]) ? trim($row[0]) : null);
    
    $mailhost = substr($email, strpos($email, '@'));
    $mailhost = str_replace('@', '', $mailhost);

    // debug-test-invalid
    // $email = 'bijikudakejepit@gmail.com';
    
    clog(' > '.$email, !1);
    $resp = verifyEmail($email, $email_from, true);
    
    if( !empty($resp) && $resp[0] == 'valid' ){
      clog(" [Ok]");
      $email_valid[] = $email;
    }
    else{
      
      clog(" [-INVALID-]");
      $email_not_valid[] = $email;
    }
  }

  echo "VALID-EMAIL:";
  print_r($email_valid);
  echo "NOT-VALID:";
  print_r($email_not_valid);
}


function clog($x, $nl=true){

  echo $x.($nl ? "\n" : "");
}
<?php

function verifyEmail($toemail, $fromemail, $getdetails = false){
  $email_arr = explode("@", $toemail);
  $domain = array_slice($email_arr, -1);
  $domain = $domain[0];

  // Trim [ and ] from beginning and end of domain string, respectively
  $domain = ltrim($domain, "[");
  $domain = rtrim($domain, "]");

  $result = $details = '';

  if( "IPv6:" == substr($domain, 0, strlen("IPv6:")) ) {
    $domain = substr($domain, strlen("IPv6") + 1);
  }

  $mxhosts = array();
  if( filter_var($domain, FILTER_VALIDATE_IP) )
    $mx_ip = $domain;
  else
    getmxrr($domain, $mxhosts, $mxweight);

  if(!empty($mxhosts) )
    $mx_ip = $mxhosts[array_search(min($mxweight), $mxhosts)];
  else {
    if( filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ) {
      $record_a = dns_get_record($domain, DNS_A);
    }
    elseif( filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ) {
      $record_a = dns_get_record($domain, DNS_AAAA);
    }

    if( !empty($record_a) )
      $mx_ip = $record_a[0]['ip'];
    else {

      $result   = "invalid";
      $details .= "No suitable MX records found.";

      return ( (true == $getdetails) ? array($result, $details) : $result );
    }
  }
  
  $connect = @fsockopen($mx_ip, 25); 
  if($connect){ 
    if(preg_match("/^220/i", $out = fgets($connect, 1024))){
      fputs ($connect , "HELO $mx_ip\r\n"); 
      $out = fgets ($connect, 1024);
      $details .= $out."\n";
 
      fputs ($connect , "MAIL FROM: <$fromemail>\r\n"); 
      $from = fgets ($connect, 1024); 
      $details .= $from."\n";

      fputs ($connect , "RCPT TO: <$toemail>\r\n"); 
      $to = fgets ($connect, 1024);
      $details .= $to."\n";

      fputs ($connect , "QUIT"); 
      fclose($connect);

      if(!preg_match("/^250/i", $from) || !preg_match("/^250/i", $to)){
        $result = "invalid"; 
      }
      else{
        $result = "valid";
      }
    } 
  }
  else{
    $result = "invalid";
    $details .= "Could not connect to server";
  }
  if($getdetails){
    return array($result, $details);
  }
  else{
    return $result;
  }
}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.