由于目标机器主动拒绝它,因此无法建立连接74.125.25.109:993

时间:2014-09-11 09:04:13

标签: c# imap tcpclient gmail-imap imapx

您好我正在尝试使用C#中的ImapX库连接到gmail。 但是得到这样的错误没有连接可以进行,因为目标机器在创建TcpClient(在ImapX内部)时主动拒绝它74.125.25.109:993。 我在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("example@gmail.com", "example123"))
        {
            // login successful
        }
        Console.WriteLine("Connection Successful...!");
        Console.ReadLine();
    }
    else
    {
        Console.WriteLine("Connection UnSuccessful...!");
        Console.ReadLine();
        // connection not successful
    }
}

这是ImapX库中的Client方法。

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();
    }
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

当您使用带有GMail的ImapX时,以下代码足以建立连接:

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

它将使用SSL与标准993端口。如果您想手动指定SSL版本,对于GMail,您需要使用SslProtocols.Default,这相当于SslProtocols.Ssl3 | SslProtocols.Tls