title: Email verification to know email really exists on server using php
body: <p>i am trying to make a function where i can check if a email really exists or not i searched various forums but the code only works fine with gmail not others i am checking mx records can i do something to connect to those mx records and ask server if email really does exists or not.
  I have added much of the code so that you can understand what do i need to do
  Thank's</p>
  
  <pre><code>private function verifyEmail($toemail, $fromemail, $getdetails = false)
      {
          $result='';
          $details=' ';
          // Get the domain of the email recipient
          $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, ']');
  
          if ('IPv6:' == substr($domain, 0, strlen('IPv6:'))) {
              $domain = substr($domain, strlen('IPv6') + 1);
          }
  
          $mxhosts = array();
          // Check if the domain has an IP address assigned to it
          if (filter_var($domain, FILTER_VALIDATE_IP)) {
              $mx_ip = $domain;
          } else {
              // If no IP assigned, get the MX records for the host name
              getmxrr($domain, $mxhosts, $mxweight);
          }
  
          if (!empty($mxhosts)) {
              $mx_ip = $mxhosts[array_search(min($mxweight), $mxhosts)];
          } else {
              // If MX records not found, get the A DNS records for the host
              if (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
                  $record_a = dns_get_record($domain, DNS_A);
                  // else get the AAAA IPv6 address record
              } 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 {
                  // Exit the program if no MX records are found for the domain host
                  $result = 'Invalid Email MX ';
                  $details .= 'No suitable MX records found.';
  
                  return ((true == $getdetails) ? array($result, $details) : $result);
              }
          }
  
          // Open a socket connection with the hostname, smtp port 25
          $connect = @fsockopen($mx_ip, 25);
  
          if ($connect) {
  
              // Initiate the Mail Sending SMTP transaction
              if (preg_match('/^220/i', $out = fgets($connect, 1024))) {
  
                  // Send the HELO command to the SMTP server
                  fputs($connect, "HELO $mx_ip\r\n");
                  $out = fgets($connect, 1024);
                  $details .= $out."\n";
  
                  // Send an SMTP Mail command from the sender's email address
                  fputs($connect, "MAIL FROM: &lt;$fromemail&gt;\r\n");
                  $from = fgets($connect, 1024);
                  $details .= $from."\n";
  
                  // Send the SCPT command with the recepient's email address
                  fputs($connect, "RCPT TO: &lt;$toemail&gt;\r\n");
                  $to = fgets($connect, 1024);
                  $details .= $to."\n";
  
                  // Close the socket connection with QUIT command to the SMTP server
                  fputs($connect, 'QUIT');
                  fclose($connect);
  
                  // The expected response is 250 if the email is valid
                  if (!preg_match('/^250/i', $from) || !preg_match('/^250/i', $to)) {
                      $result = 'Invalid Email Address';
                  } else {
                      $result = 'Valid Email Address';
                  }
              }else{echo 'layht';}
          } else {
              $result = 'Invalid Email Address';
              $details .= 'Could not connect to server';
          }
          if ($getdetails) {
              return array($result, $details);
          } else {
              return $result;
          }
      }
  </code></pre>