如何测试 Hotmail 帐户是不是存在? [关闭]
Posted
技术标签:
【中文标题】如何测试 Hotmail 帐户是不是存在? [关闭]【英文标题】:How To Test If Hotmail Account Exists? [closed]如何测试 Hotmail 帐户是否存在? [关闭] 【发布时间】:2013-03-20 22:03:33 【问题描述】:我正在尝试测试我的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;
【问题讨论】:
没帮你怎么办?你有没有得到错误,如果有,是哪个?您尝试过对此代码进行任何更改吗? 许多邮件服务器使用它来防御垃圾邮件。他们不会在响应 rcpt 时返回错误,即使是接收者。不存在。 好的。对于每个 hotmail 帐户,它都会返回 false 最好向帐户发送验证电子邮件并让用户单击其中的链接进行订阅 是的,你是对的,但我有 100 万封电子邮件,我无法发送大量电子邮件:( 【参考方案1】:关于这个问题有很多,其中很多都有相同的一般性答案。如果您要发送到的 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();
这样的事情会让你登录到 hotmail 的 SMTP 以发送电子邮件,但只要你的凭据正确,它就不会返回电子邮件是否正确。
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());
我建议在您的电子邮件中向这些人发送一个激活链接,如果他们点击它,它会将他们的电子邮件设置为已验证,以便您知道您可以向他们发送电子邮件。然后,您还必须确保不要发送未经身份验证的电子邮件,否则您会将电子邮件发送到一个巨大的黑洞。
这里有一些过去问过这个问题的人的参考资料。
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#?
【讨论】:
以上是关于如何测试 Hotmail 帐户是不是存在? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft 帐户异常登录活动,QQ邮箱代收hotmail邮件不成功