2013-03-20 5 views
-2

내 핫메일 계정의 존재 여부를 테스트하려고하는데 다음 코드는 도움이되지 않습니다.Hotmail 계정이 존재하는지 테스트하는 방법?

public bool IsExists_SMTPMethod(string email) 
{ 
    string domain = email.Substring(email.IndexOf("@") + 1); 
    var servers = _commander.GetMXServers(domain); 

    Socket socket = null; 

    foreach (MXServer mxserver in servers) 
    { 
     IPHostEntry ipHost = Dns.Resolve(mxserver.MailExchanger); 
     IPEndPoint endPoint = new IPEndPoint(ipHost.AddressList[0], 25); 
     socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 
     socket.Connect(endPoint); 

     if (!CheckResponse(socket, ResponseEnum.ConnectSuccess)) 
     { 
      socket.Close(); 
     } 
     else 
     { 
      // If connected, send SMTP commands 
      { 
       SendData(socket, string.Format("HELO {0}\r\n", "machinename")); 
       if (!CheckResponse(socket, ResponseEnum.GenericSuccess)) 
       { 
        socket.Close(); 
        continue; 
       } 

       SendData(socket, string.Format("MAIL FROM: <{0}>\r\n", "[email protected]")); 
       CheckResponse(socket, ResponseEnum.GenericSuccess); 

       SendData(socket, string.Format("RCPT TO: <{0}>\r\n", email)); 
       bool result = CheckResponse(socket, ResponseEnum.GenericSuccess); 
       if (!result) 
       { 
        socket.Close(); 
        continue; 
       } 
       else 
        return true; 
      } 
     } 
    } 

    return false; 
} 
+0

당신을 도울 방법을하지 않았다? 오류가 발생 했습니까? 그렇다면 어떤 오류가 있었습니까? 이 코드에서 변경 한 사항은 무엇입니까? – techturtle

+5

많은 메일 서버가 이것을 스팸 방지를 위해 사용합니다. 수신자가 수신자 인 경우에도 rcpt에 대한 응답으로 오류를 반환하지 않습니다. 존재하지 않습니다. –

+0

확인. false로 돌아가는 모든 핫메일 계정에 대해 –

답변

0

많은 질문이 있으며 많은 답변이 동일한 일반적인 답변이 있습니다. 보내는 SMTP 서버에서 허용하는 경우 RCPT TO, VRFY 또는 EXPN과 같은 SMTP 명령을 사용하여 전자 메일 주소가 존재하는지 확인할 수 있습니다.

문제는 hotmail이 허용하지 않는 것 같습니다.

다음 코드는 gmail에서 작동하지만 사용자가 있는지 여부를 인증하지만 핫메일 주소를 인증하는 데 사용할 수 없습니다. SMTP 서버는 모든 메일에 대해 유효하지 않은 값을 반환합니다. 이 같은

var email = "[email protected]"; 
TcpClient tClient = new TcpClient("gmail-smtp-in.l.google.com", 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 KirtanHere" + 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:<"+email+">"+CRLF); 
netStream.Write(dataBuffer, 0, dataBuffer.Length); 
ResponseString = reader.ReadLine(); 
if (GetResponseCode(ResponseString) == 550) 
{ 
    Console.WriteLine("Mail Address Does not Exist"); 
    Console.WriteLine("Original Error from Smtp Server "+ResponseString); 
} 
else 
{ 
    Console.WriteLine("Original response from Smtp Server "+ResponseString); 
} 
/* QUITE CONNECTION */ 
dataBuffer = BytesFromString("QUITE" + CRLF); 
netStream.Write(dataBuffer, 0, dataBuffer.Length); 
tClient.Close(); 

그리고 뭔가 이메일을 보내 핫메일의 SMTP에 로그인하게됩니다하지만 이메일이 한 자격 증명이 올바른지으로 올바른지 여부를 반환하지 않습니다.

try 
{ 
    SmtpClient SmtpServer = new SmtpClient("smtp.live.com"); 
    SmtpServer.EnableSsl = true; 
    SmtpServer.UseDefaultCredentials = false; 
    SmtpServer.Port = 587; 
    SmtpServer.Credentials = new System.Net.NetworkCredential("[email protected]", "password"); 
    var message = new MailMessage { 
    From = new MailAddress("[email protected]"), 
    Subject = "test" 

    }; 

    message.To.Add("[email protected]"); 
    SmtpServer.Send(message); 
} 
catch(SmtpException x) 
{ 
    //This unfortunately only really calls authentication failures 
    Console.WriteLine(x.ToString()); 
} 

내가이 사람들에게 당신의 전자 우편의 활성화 링크를 보내는 것이 좋습니다, 그리고 그들이 그것을 클릭하면 당신은 당신이 그들에게 이메일을 보낼 수 있습니다 알 수 있도록, 그것은 검증에 이메일을 설정합니다. 그런 다음 인증되지 않은 이메일을 보내지 않도록해야합니다. 그렇지 않으면 거대한 블랙홀에 이메일을 보냅니다.

다음은 과거에이 질문을 한 사람들을위한 참고 자료입니다.

Validating to see if an email exists in its mailbox

Can I check if an email address exists using .net?

는 는

how to check if a given email address actually exist in c#?