Click or drag to resize
MimeKit

Pop3ClientIsConnected Property

Gets whether or not the client is currently connected to an POP3 server.

Namespace: MailKit.Net.Pop3
Assembly: MailKit (in MailKit.dll) Version: 4.3.0
Syntax
C#
public override bool IsConnected { get; }

Property Value

Boolean
true if the client is connected; otherwise, false.

Implements

IMailServiceIsConnected
IMailServiceIsConnected
Remarks

The IsConnected state is set to true immediately after one of the Connect methods succeeds and is not set back to false until either the client is disconnected via Disconnect(Boolean, CancellationToken) or until a Pop3ProtocolException is thrown while attempting to read or write to the underlying network socket.

When an Pop3ProtocolException is caught, the connection state of the Pop3Client should be checked before continuing.

Example
C#
public static void DownloadNewMessages (HashSet<string> previouslyDownloadedUids)
{
    using (var client = new Pop3Client ()) {
        IList<string> uids = null;

        try {
            client.Connect ("pop.gmail.com", 995, SecureSocketOptions.SslOnConnect);
        } catch (Pop3CommandException ex) {
            Console.WriteLine ("Error trying to connect: {0}", ex.Message);
            Console.WriteLine ("\tStatusText: {0}", ex.StatusText);
            return;
        } catch (Pop3ProtocolException ex) {
            Console.WriteLine ("Protocol error while trying to connect: {0}", ex.Message);
            return;
        }

        try {
            client.Authenticate ("username", "password");
        } catch (AuthenticationException ex) {
            Console.WriteLine ("Invalid user name or password.");
            return;
        } catch (Pop3CommandException ex) {
            Console.WriteLine ("Error trying to authenticate: {0}", ex.Message);
            Console.WriteLine ("\tStatusText: {0}", ex.StatusText);
            return;
        } catch (Pop3ProtocolException ex) {
            Console.WriteLine ("Protocol error while trying to authenticate: {0}", ex.Message);
            return;
        }

        // for the sake of this example, let's assume GMail supports the UIDL extension
        if (client.Capabilities.HasFlag (Pop3Capabilities.UIDL)) {
            try {
                uids = client.GetMessageUids ();
            } catch (Pop3CommandException ex) {
                Console.WriteLine ("Error trying to get the list of uids: {0}", ex.Message);
                Console.WriteLine ("\tStatusText: {0}", ex.StatusText);

                // we'll continue on leaving uids set to null...
            } catch (Pop3ProtocolException ex) {
                Console.WriteLine ("Protocol error while trying to authenticate: {0}", ex.Message);

                // Pop3ProtocolExceptions often cause the connection to drop
                if (!client.IsConnected)
                    return;
            }
        }

        for (int i = 0; i < client.Count; i++) {
            if (uids != null && previouslyDownloadedUids.Contains (uids[i])) {
                // we must have downloaded this message in a previous session
                continue;
            }

            try {
                // download the message at the specified index
                var message = client.GetMessage (i);

                // write the message to a file
                if (uids != null) {
                    message.WriteTo (string.Format ("{0}.msg", uids[i]));

                    // keep track of our downloaded message uids so we can skip downloading them next time
                    previouslyDownloadedUids.Add (uids[i]);
                } else {
                    message.WriteTo (string.Format ("{0}.msg", i));
                }
            } catch (Pop3CommandException ex) {
                Console.WriteLine ("Error downloading message {0}: {1}", i, ex.Message);
                Console.WriteLine ("\tStatusText: {0}", ex.StatusText);
                continue;
            } catch (Pop3ProtocolException ex) {
                Console.WriteLine ("Protocol error while sending message {0}: {1}", i, ex.Message);
                // most likely the connection has been dropped
                if (!client.IsConnected)
                    break;
            }
        }

        if (client.IsConnected) {
            // if we do not disconnect cleanly, then the messages won't actually get deleted
            client.Disconnect (true);
        }
    }
}
See Also