Соединение установить не удалось, так как целевая машина отказала ему 74.125.25.109:993.

Привет, я пытаюсь подключиться к Gmail, используя библиотеку ImapX на С#. Но возникает такая ошибка. Соединение не может быть установлено, потому что целевая машина активно отказывается от него 74.125.25.109:993 при создании TcpClient (внутри ImapX). Я просматриваю несколько одинаковых вопросов в stackoverflow, но ни один из них мне не помог.

Вот мой код.

static void Main(string[] args)
{
    var client = new ImapClient("imap.gmail.com",993, true);
    client.SslProtocol = System.Security.Authentication.SslProtocols.Ssl2;
    client.UseSsl = true;
    if (client.Connect()) // This method creates new instance of TcpClient which throws error so returning false from catch block method has been described below.
    {

        if (client.Login("[email protected]", "example123"))
        {
            // login successful
        }
        Console.WriteLine("Connection Successful...!");
        Console.ReadLine();
    }
    else
    {
        Console.WriteLine("Connection UnSuccessful...!");
        Console.ReadLine();
        // connection not successful
    }
}

Вот клиентский метод в библиотеке ImapX.

public bool Connect(string host, int port, SslProtocols sslProtocol = SslProtocols.None,
    bool validateServerCertificate = true)
{
    _host = host;
    _port = port;
    _sslProtocol = sslProtocol;
    _validateServerCertificate = validateServerCertificate;

    if (IsConnected)
        throw new InvalidStateException("The client is already connected. Please disconnect first.");

    try
    {

        _client = new TcpClient(_host, _port);
        if (_sslProtocol == SslProtocols.None)
        {
            _ioStream = _client.GetStream();
            _streamReader = new StreamReader(_ioStream);
        }
        else
        {
            _ioStream = new SslStream(_client.GetStream(), false, CertificateValidationCallback, null);
            (_ioStream as SslStream).AuthenticateAsClient(_host, null, _sslProtocol, false);
            _streamReader = new StreamReader(_ioStream);
        }


        string result = _streamReader.ReadLine();

        _lastActivity = DateTime.Now;

        if (result != null && result.StartsWith(ResponseType.ServerOk))
        {
            Capability();
            return true;
        }
        else if (result != null && result.StartsWith(ResponseType.ServerPreAuth))
        {
            IsAuthenticated = true;
            Capability();
            return true;
        }
        else
            return false;
    }
    catch (Exception)
    {
        return false;
    }
    finally
    {
        if (!IsConnected)
            CleanUp();
    }
}

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


person Jenish Rabadiya    schedule 11.09.2014    source источник
comment
Если я использую Telenet, то я становлюсь таким. Microsoft Telnet› открыть imap.gmail.com 993 Подключение к imap.gmail.com... Не удалось открыть соединение с хостом через порт 99 3: Ошибка подключения   -  person Jenish Rabadiya    schedule 11.09.2014
comment
Можете ли вы подключиться к какой-либо почтовой программе, такой как Thunderbird? У вас настроен какой-нибудь прокси?   -  person František Žiačik    schedule 11.09.2014
comment
@ František Žiačik Я не уверен насчет Thunderbird, вместо этого я использую почту Windows Live в качестве почтового клиента, и у меня не настроен прокси-сервер.   -  person Jenish Rabadiya    schedule 11.09.2014
comment
Вы пробовали разные протоколы? Например, client.SslProtocol = System.Security.Authentication.SslProtocols.Default. Я бы ожидал, что SSL2 в порядке, но вы никогда не знаете.   -  person bastijn    schedule 11.09.2014
comment
@bastijn да, ни один из них не работает, и я попытался подключиться к поп-серверу с помощью openpop, который отлично работает со мной, но мне нужно выполнить передачу почты, используя только Imap.   -  person Jenish Rabadiya    schedule 11.09.2014
comment
Ваш код выглядит прилично на первый взгляд. Может быть, взгляните на OAuth от Google и не забудьте зарегистрировать свое приложение в своей учетной записи Google? Первое обращение в Google: limilabs.com/blog/oauth2-gmail-imap- сервисный аккаунт .   -  person bastijn    schedule 11.09.2014
comment
Кто-то блокирует вас. Может быть ваш брандмауэр. Можно через прокси. Это может быть ваша защита от вредоносных программ. Возможно, это Google, потому что ваш IP-адрес использовался для рассылки слишком большого количества спама.   -  person Hans Passant    schedule 11.09.2014
comment
@HansPassant Спасибо, Ганс, на другой машине мой код начинает работать, есть что-то, что меня блокирует. Спасибо всем за ваше время.   -  person Jenish Rabadiya    schedule 11.09.2014


Ответы (1)


Когда вы используете ImapX с GMail, для установки соединения достаточно следующего кода:

var client = new ImapClient("imap.gmail.com", true);
if (client.Connect()) {
    // ...
}

Он будет использовать SSL со стандартным портом 993. Если вы хотите указать версию SSL вручную, для GMail вам нужно использовать SslProtocols.Default, что эквивалентно SslProtocols.Ssl3 | SslProtocols.Tls

person Pavel Azanov    schedule 16.11.2014
comment
Ты прав. Проблема была с моей машиной и сетью, которые не позволяли мне подключиться к imap.gmail.com через порт 993. Я попробовал другую машину, и она заработала. Спасибо за ваше время. - person Jenish Rabadiya; 17.11.2014