Могу ли я проверить, существует ли почтовый адрес с использованием .net?

Я видел некоторые php-примеры того, как вы можете пинговать почтовый ящик (без отправки ему почты), чтобы проверить, существует ли он. Мне было интересно, знает ли кто-нибудь, возможно ли это с .net? Если я собираюсь написать приложение, чтобы выполнить массовую проверку в списке писем, которые я просмотрел на своем сайте.

Ответ 2

Нет, в принципе невозможно проверить, существует ли электронная почта - независимо от языка. Для этого просто нет протокола.

Есть частичные решения, но ни один из них не является надежным.

См. Как проверить, существует ли почтовый адрес без отправки электронной почты? для получения более подробной информации.

Ответ 3

Что вы имеете в виду, если вы пишете "проверить электронную почту"? Не отправляя уникальную ссылку для владельца электронной почты, вы не можете проверить это, вы можете проверить только синтаксис электронной почты и подключение к 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);
}

smtp check

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);

Ответ 4

http://www.codicode.com/art/free_asp_net_email_validator_verifier.aspx. Используйте ссылку dll для вашего кода. Он бесплатный как для личного использования, так и для перераспределения. Он проверяет существование доменного имени, фактически не отправляя электронное письмо.

Ответ 5

Это не является надежным. Лучшее, что вы можете сделать, это проверить синтаксис и посмотреть, разрешено ли доменное имя.

Синтаксис электронной почты 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)))

Ответ 6

protected bool checkDNS(string host, string recType = "MX")
{
    bool result = false;
    try
    {
        using (Process proc = new Process())
        {
            proc.StartInfo.FileName = "nslookup";
            proc.StartInfo.Arguments = string.Format("-type={0} {1}", recType, host);
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.ErrorDialog = false;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
                {
                    if ((e.Data != null) && (!result))
                        result = e.Data.StartsWith(host);
                };
            proc.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
                {
                    if (e.Data != null)
                    {
                        //read error output here, not sure what for?
                    }
                };
            proc.Start();
            proc.BeginErrorReadLine();
            proc.BeginOutputReadLine();
            proc.WaitForExit(30000); //timeout after 30 seconds.
        }
    }
    catch
    {
        result = false;
    }
    return result;
}