web-dev-qa-db-fra.com

Puis-je vérifier si une adresse e-mail existe avec .net?

J'ai vu quelques exemples de php sur la façon dont vous pouvez envoyer une requête ping à une boîte de réception (sans lui envoyer de courrier) pour vérifier si elle existe. Je me demandais si quelqu'un sait si c'est possible avec .net? Si je vais écrire une application pour faire une vérification groupée de la liste des e-mails que j'ai capturés sur mon site.

26
phil crowe

SMTP définit la commande VRFY pour cela , mais comme les abus des spammeurs ont totalement submergé le nombre d'utilisations légitimes, pratiquement tous les serveurs de messagerie dans le monde sont configurés pour mentir .

45
Ben Voigt

Que voulez-vous dire si vous écrivez "vérifier les e-mails"? Sans envoyer un lien unique pour le propriétaire de l'e-mail, vous ne pouvez pas vérifier cela, vous pouvez uniquement vérifier la syntaxe de l'e-mail et la connexion à smtp.

public static bool isEmail(string inputEmail)
{
   inputEmail  = NulltoString(inputEmail);
   string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
         @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
         @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
   Regex re = new Regex(strRegex);
   if (re.IsMatch(inputEmail))
    return (true);
   else
    return (false);
}

vérification smtp

string[] Host = (address.Split('@'));
string hostname = Host[1];

IPHostEntry IPhst = Dns.Resolve(hostname);
IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], 25);
Socket s= new Socket(endPt.AddressFamily, 
        SocketType.Stream,ProtocolType.Tcp);
s.Connect(endPt);
9
Svisstack

Non, il est en principe impossible de vérifier si un email existe - indépendamment de la langue. Il n'y a tout simplement pas de protocole pour le faire.

Il existe des solutions partielles, mais aucune n'est fiable.

Voir Comment vérifier si une adresse e-mail existe sans envoyer d'e-mail? pour plus de détails.

9
sleske

http://www.codicode.com/art/free_asp_net_email_validator_verifier.aspx . Utilisez la référence dll à votre code. Il est gratuit à la fois pour un usage personnel et une redistribution. Il vérifie l'existence du nom de domaine sans envoyer réellement d'e-mail.

3

Ce n'est pas infaillible. Le mieux que vous puissiez faire est de vérifier la syntaxe et de voir si le nom de domaine se résout.

Syntaxe des e-mails RegEx: (?<username>#?[_a-zA-Z0-9-+]+(\.[_a-zA-Z0-9-+]+)*)@(?<domain>[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|arpa|asia|coop|info|jobs|mobi|museum|name|travel)))

0
Brad

1. Obtenez l'enregistrement MX pour le fournisseur de messagerie à l'aide de la commande suivante:

nslookup -type=mx gmail.com
  1. Appelez le client TCP pour vérifier si l'e-mail est valide:

    private static void Main(string[] args)
    {            
      var gMail = IsEmailAccountValid("gmail-smtp-in.l.google.com", "[email protected]");
      Console.WriteLine($"Gmail account is valid - {gMail.ToString()}");
    
      var live = IsEmailAccountValid("live-com.olc.protection.Outlook.com", "[email protected]");
      Console.WriteLine($"Live account is valid - {live.ToString()}");
    }
    
    private static byte[] BytesFromString(string str)
    {
      return Encoding.ASCII.GetBytes(str);
    }
    
    private static int GetResponseCode(string ResponseString)
    {
      return int.Parse(ResponseString.Substring(0, 3));
    }
    
    private static bool IsEmailAccountValid(string tcpClient, string emailAddress)
    {
      TcpClient tClient = new TcpClient(tcpClient, 25);
      string CRLF = "\r\n";
      byte[] dataBuffer;
      string ResponseString;
      NetworkStream netStream = tClient.GetStream();
      StreamReader reader = new StreamReader(netStream);
      ResponseString = reader.ReadLine();
    
      /* Perform HELO to SMTP Server and get Response */
      dataBuffer = BytesFromString("HELO Hi" + CRLF);
      netStream.Write(dataBuffer, 0, dataBuffer.Length);
      ResponseString = reader.ReadLine();
      dataBuffer = BytesFromString("MAIL FROM:<[email protected]>" + CRLF);
      netStream.Write(dataBuffer, 0, dataBuffer.Length);
      ResponseString = reader.ReadLine();
    
      /* Read Response of the RCPT TO Message to know from google if it exist or not */
      dataBuffer = BytesFromString($"RCPT TO:<{emailAddress}>" + CRLF);
      netStream.Write(dataBuffer, 0, dataBuffer.Length);
      ResponseString = reader.ReadLine();
      var responseCode = GetResponseCode(ResponseString);
    
      if (responseCode == 550)
      {
        return false;
      }
    
      /* QUITE CONNECTION */
      dataBuffer = BytesFromString("QUITE" + CRLF);
      netStream.Write(dataBuffer, 0, dataBuffer.Length);
      tClient.Close();
      return true;
    }
    

L'enregistrement MX peut être obtenu à l'aide du code:

var lookup = new LookupClient();
var result = lookup.QueryAsync("gmail.com", QueryType.ANY).Result;
var domainName = result.Additionals[result.Additionals.Count - 1].DomainName.Value;

En utilisant le code ci-dessus, recherchez la recherche MX et utilisez cette recherche MX pour vérifier si l'e-mail est valide ou non.

La

0
Nikheel