Pop |
public override bool IsConnected { get; }
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.
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); } } }