2017-07-27 86 views
2

我正在创建一个Web服务来验证用户输入的电子邮件是否存在。这里是web方法。问题是这个方法总是在电子邮件错误或正确时返回true。如何验证电子邮件是否实际存在从DNS

[WebMethod(Description = "This method is used to validate email")] 
public bool ValidateEmail(string email) 
{ 
    bool isValid = false; 

    try 
    { 
     string[] host = (email.Split('@')); 
     string hostname = host[1]; 

     IPHostEntry IPhost = Dns.GetHostByName(hostname); 

     IPEndPoint endPt = new IPEndPoint(IPhost.AddressList[0], 25); 
     Socket soc = new Socket(endPt.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 

     soc.Connect(endPt); //open connection to host 
     soc.Close(); 
     isValid = true; 

    } 
    catch (Exception ex) 
    { 
     //ex.Message.ToString(); 
     isValid = false; 
    } 

    return isValid = true; 

} 
+0

'Dns.GetHostByName()'查询DNS * A *的记录,用于没有在所有涉及到的SMTP服务器是服务领域的地址域 - 这些信息是在* MX记录* - 您解决的IP与电子邮件无关。 –

+1

验证电子邮件的正确方法是向其发送带有确认链接的电子邮件。 –

回答

0

此链接为您提供您正在寻找的答案。总之,我不认为你可以验证一个电子邮件目的地(不只是格式)是有效的,不发送消息。所以你可以发送电子邮件,如果没有发生回传(不确定技术术语在这里),你可以确认它的好处。

C# code to validate email address

+0

有没有办法可以ping通邮件地址,如果存在,它会发送回复。 –

+0

正确配置的邮件服务器在邮件提交之前不会显示地址,因此您必须将电子邮件发送到该地址并检查正确的验收码(并且假设您的邮件地址不是灰名单并且有等待一段时间,然后邮件服务器才能真正接受邮件。 – user3788685