Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何测试Hotmail帐户是否存在?_C#_Asp.net_Network Programming_Websocket_Hotmail - Fatal编程技术网

C# 如何测试Hotmail帐户是否存在?

C# 如何测试Hotmail帐户是否存在?,c#,asp.net,network-programming,websocket,hotmail,C#,Asp.net,Network Programming,Websocket,Hotmail,我正在尝试测试我的hotmail帐户是否存在,但以下代码对我没有帮助 public bool IsExists_SMTPMethod(string email) { string domain = email.Substring(email.IndexOf("@") + 1); var servers = _commander.GetMXServers(domain); Socket socket = null; foreach (MXServer mxser

我正在尝试测试我的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", "from@domain.com"));
                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;
}
public bool IsExists\u SMTPMethod(字符串电子邮件)
{
字符串域=email.Substring(email.IndexOf(“@”)+1);
var servers=\u commander.GetMXServers(域);
套接字=空;
foreach(服务器中的MXServer MXServer)
{
IPHostEntry ipHost=Dns.Resolve(mxserver.MailExchanger);
IPEndPoint端点=新的IPEndPoint(ipHost.AddressList[0],25);
套接字=新套接字(endPoint.AddressFamily、SocketType.Stream、ProtocolType.Tcp);
socket.Connect(端点);
if(!CheckResponse(套接字,ResponseEnum.ConnectSuccess))
{
socket.Close();
}
其他的
{
//如果已连接,请发送SMTP命令
{
SendData(socket,string.Format(“HELO{0}\r\n”,“machinename”);
if(!CheckResponse(套接字,ResponseEnum.genericsucces))
{
socket.Close();
继续;
}
SendData(套接字,string.Format(“邮件发件人:\r\n”,”from@domain.com"));
CheckResponse(套接字、ResponseEnum.genericsucces);
SendData(socket,string.Format(“RCPT TO:\r\n”,email));
bool result=CheckResponse(套接字,ResponseEnum.genericsucces);
如果(!结果)
{
socket.Close();
继续;
}
其他的
返回true;
}
}
}
返回false;
}

关于这一点有很多问题,其中很多问题都有相同的一般答案。如果要发送到的SMTP服务器允许,可以使用诸如RCPT to、VRFY或EXPN之类的SMTP命令确认电子邮件地址是否存在

问题是,hotmail似乎不允许这样做

以下代码适用于gmail(并验证用户是否在那里),但您不能使用它来验证hotmail地址-他们的SMTP服务器返回的所有内容都无效

var email = "invalidemailasifnasiofnasonfaso@gmail.com";
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:<test@gmail.com>" + 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();
我的建议是在你的电子邮件中给这些人发送一个激活链接,如果他们点击它,它会将他们的电子邮件设置为已验证,这样你就知道你可以给他们发送电子邮件。然后你还必须确保你不会发送未经验证的电子邮件,否则你会将电子邮件发送到一个巨大的黑洞中

这里有一些参考资料,供过去曾问过这个问题的人参考


怎么帮不了你?您是否有错误,如果有,是哪个错误?您尝试过对此代码进行任何更改吗?许多邮件服务器使用此代码来防御垃圾邮件。它们不会在响应rcpt to时返回错误,即使收件人已收到。不存在。对于每个hotmail帐户,返回错误是否最好向帐户发送验证电子邮件,并让用户单击其中的链接以订阅您是对的,但我有10万封电子邮件,无法发送大量电子邮件:(
try
{
    SmtpClient SmtpServer = new SmtpClient("smtp.live.com"); 
    SmtpServer.EnableSsl = true;
    SmtpServer.UseDefaultCredentials = false;
    SmtpServer.Port = 587;
    SmtpServer.Credentials = new System.Net.NetworkCredential("test@hotmail.com", "password");
    var message = new MailMessage {
    From = new MailAddress("asd@hotmail.com"),
    Subject = "test"

    };

    message.To.Add("sodfinaosidgnoasbeguosebofubasgfsgrsgr@hotmail.com");
    SmtpServer.Send(message);
}
catch(SmtpException x)
{
    //This unfortunately only really calls authentication failures
    Console.WriteLine(x.ToString());
}