-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", "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;
}
4

1 に答える 1

0

これには多くの質問があり、それらの多くは同じ一般的な答えを持っています. 送信先の 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());
}

私がお勧めするのは、これらの人々にあなたの電子メールでアクティベーションリンクを送信することです。彼らがそれをクリックすると、電子メールが検証済みに設定され、電子メールを送信できることがわかります. また、認証されていないメールに送信しないようにする必要があります。そうしないと、メールを巨大なブラック ホールに送信することになります。

過去に質問された方の参考にさせていただきます。

電子メールがメールボックスに存在するかどうかを検証する

.net を使用して電子メール アドレスが存在するかどうかを確認できますか?

特定の電子メールアドレスが実際にc#に存在するかどうかを確認する方法は?

于 2013-03-20T22:06:59.653 に答える