Smtp RCPT для тестирования
Я пытаюсь подключиться к почтовым серверам (используя TcpClient), чтобы проверить, действителен ли адрес электронной почты без отправки фактического письма (это для клиента). В настоящее время я использую GMail для тестирования и могу успешно подключиться к SMTP-серверу. Однако, когда я пытаюсь выполнить команду RCPT TO, она говорит, что аутентификация не удалась (ошибка 530). Я также проверял это на live.com SMTP-сервер, а также получить ошибку аутентификации.
Как я могу проверить, действителен ли адрес электронной почты на SMTP, используя TcpClient, фактически не отправляя электронное письмо и не нуждаясь в учетной записи на этом сервере?
Заранее благодарю вас за любую помощь.
Что я уже пробовал:
Ниже приведен код, который я сейчас использую. Он еще не оптимизирован. Это будет сделано, как только я получу команду RCPT TO для успешной работы.
using (var client = new TcpClient()) { host = "smtp.gmail.com"; var port = 465; client.Connect(host, port); // as gmail requires ssl we should use sslstream // if your smtp server doesn't support ssl you can // work directly with the underlying stream using (var stream = client.GetStream()) using (var sslstream = new SslStream(stream)) { sslstream.AuthenticateAsClient(host); using (var writer = new StreamWriter(sslstream)) using (var reader = new StreamReader(sslstream)) { string read = ""; if (stream.DataAvailable) { read = reader.ReadLine(); } if (!read.StartsWith("220")) { return false; } writer.WriteLine("EHLO " + host); writer.Flush(); do { read = reader.ReadLine(); } while (read.StartsWith("250-")); if (read.StartsWith("220") || read.StartsWith("250")) { writer.WriteLine("mail from:<test@example.com>"); writer.Flush(); read = reader.ReadLine(); if (read.StartsWith("530")) { do { read = reader.ReadLine(); } while (read.StartsWith("530-")); } if (read.StartsWith("250")) { writer.WriteLine("rcpt to:<" + _emailAddress + ">"); writer.Flush(); read = reader.ReadLine(); if (read.StartsWith("250")) { writer.WriteLine("quit"); writer.Flush(); read = reader.ReadLine(); if (read.StartsWith("221")) { return true; } } else { writer.WriteLine("quit"); writer.Flush(); } } else { writer.WriteLine("quit"); writer.Flush(); } } else { writer.WriteLine("quit"); writer.Flush(); } // gmail responds with: 220 mx.google.com esmtp } } } return true;
MadMyche
Действительно ли вы используете "test@example.com" в качестве значения MailFrom?
Dominick Marciano
Первоначально я пробовал это для тестирования, но также пытался использовать свой собственный адрес GMail. Должна ли почта из поля иметь значение, поскольку мне действительно нужно только проверить значение RCPT? И просто для пояснения, мой клиент в основном просто хочет, чтобы он функционировал так этот
[^]. Этот RCPT для проверки-единственное, на чем я застрял в данный момент.