Могу ли я проверить, существует ли адрес электронной почты, используя .net? - PullRequest
24 голосов
/ 07 октября 2010

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

Ответы [ 6 ]

45 голосов
/ 07 октября 2010

SMTP определяет команду VRFY для этого , но поскольку злоупотребления спамерами полностью сокрушают количество законных использований, практически каждый почтовый сервер в мире настроен на ложь .

9 голосов
/ 07 октября 2010

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

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

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

9 голосов
/ 07 октября 2010

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

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);
3 голосов
/ 26 февраля 2015

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

0 голосов
/ 27 января 2015
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;
}
0 голосов
/ 07 октября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...