Snippets

Idoenk . Heri Purnomo Email Validity Checker

Updated by Idoenk . Heri Purnomo

File bulk_of_emails.csv Added

  • Ignore whitespace
  • Hide word diff
+foo@example.com,bar@yahoo.com,user@example.com
Updated by Idoenk . Heri Purnomo

File checkemail.php Modified

  • Ignore whitespace
  • Hide word diff
 
 include_once("helper.php");
 
-// $data_email_fn = 'btpn-3-rev-part1.csv';
-$data_email_fn = 'btpn-3-rev-part2.csv';
-$email_from = 'boomeeco@gmail.com';
+$data_email_fn = 'bulk_of_emails.csv';
+$email_from = 'sender@example.com';
 
 $mailhost_cache = array();
 
Created by Idoenk . Heri Purnomo

File checkemail.php Added

  • Ignore whitespace
  • Hide word diff
+<?php
+
+include_once("helper.php");
+
+// $data_email_fn = 'btpn-3-rev-part1.csv';
+$data_email_fn = 'btpn-3-rev-part2.csv';
+$email_from = 'boomeeco@gmail.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" : "");
+}

File helper.php Added

  • Ignore whitespace
  • Hide word diff
+<?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;
+  }
+}
HTTPS SSH

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