Dominick Marciano Ответов: 0

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 для проверки-единственное, на чем я застрял в данный момент.

0 Ответов