Отключенный TLS 1.0 и Включенный TLS 1.2 сломали тестовый код SMTP - PullRequest
0 голосов
/ 22 января 2020

У меня есть код в c#. net 4.5.2, где я использую System. NET .Sockets.Socket для проверки подключения SMTP. Код работал нормально, когда TLS 1.0 был включен, но теперь мы перешли на TLS 1.2, и код сломался. Ниже приведен код, не работающий с TLS 1.2.

using (Socket tcpSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
{
    tcpSocket.Connect(endPoint);
    if (!CheckResponse(tcpSocket, 220))
    {
        return false;
    }

    // send HELO and test the response for code 250 = proper response
    SendData(tcpSocket, string.Format("HELO {0}\r\n", Dns.GetHostName()));
    if (!CheckResponse(tcpSocket, 250))
    {
        return false;
    }

    // if we got here it's that we can connect to the smtp server
    return true;
}

private static bool CheckResponse(Socket socket, int expectedCode)
{
    while (socket.Available == 0)
    {
        System.Threading.Thread.Sleep(100);
    }
    byte[] responseArray = new byte[1024];
    socket.Receive(responseArray, 0, socket.Available, SocketFlags.None);
    string responseData = Encoding.ASCII.GetString(responseArray);
    int responseCode = Convert.ToInt32(responseData.Substring(0, 3));
    if (responseCode == expectedCode)
    {
        return true;
    }
    return false;
}

Проблема в том, что я не могу использовать приведенный выше код, когда TLS 1.2 включен. Может кто-нибудь помочь мне написать код, который совместим с TLS 1.2

Заранее спасибо.

...