2016-06-06 1 views
1

Je suis maintenant plus avec l'envoi de courriels en vrac en utilisant le protocole SMTP. Avant d'envoyer des mails j'ai besoin de vérifier que les adresses mail sont valides. J'ai un code pour le vérifier & Je l'ai ajouté ci-dessous. C'est du Github. J'ai juste besoin de confirmer avec vous tout cela en utilisant ces vérifications de port DNS, cela rend-il notre serveur dans un problème comme Blacklisting etc., en vérifiant beaucoup de mails qui ne sont pas valides?Validation domail e-mail en utilisant DNS vérifier php

<?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, "]"); 
    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; 
    } 
} 
?> 

Si vous avez une meilleure idée de me aider, s'il vous plaît poster & aide. En vous remerciant d'avance.

Répondre

2

Une recherche DNS n'entraînera pas de liste noire. Cependant, il sera très sensible à la qualité de votre service DNS - j'ai récemment commencé à utiliser net_dns2 plutôt que getmxrr() car ce dernier ne fait pas la différence entre les délais d'attente, NXDOMAIN et d'autres erreurs (malheureusement, les serveurs DNS sont configurés ici) experts").

(il peut aussi être utile de savoir que j'utilise le curl_multi _ *() pour exécuter simultanément lookups - le traitement d'une grande liste peut prendre un à long temps - décrit here). Probing the MX peut vous obliger à être sur liste noire - et c'est surtout une perte de temps en tant que mesure de délivrabilité (et comme le script que vous utilisez résout explicitement une adresse IP pour chaque MX, un peu cher en termes de performance). De plus, cela conduira à des faux négatifs si le MX primaire est indisponible (SMTP est conçu pour être asynchrone).

Une solution alternative, réduisant les faux négatifs (et les faux positifs par rapport à la méthode que vous décrivez) est d'utiliser un bounce handler, bien que cela se fasse au prix d'une certaine latence lors de la détermination.

Je voudrais aussi suggérer (selon le legth du temps qu'il faut pour traiter la liste) que vous pré-valider l'adresse e-mail avec une expression régulière - mais méfiez-vous il y a beaucoup de mauvais exemples de la façon dont pour ce faire sur Internet.

+0

Ty, pour la réponse. Je vais vérifier. – Sinto