Examine headers example
A full email message might be several megabytes. If you download that message, and find out based on the headers that you do not need it, you properly should not have downloaded it in the first place.
The POP3 protocol allows you to peek at the message headers without downloading the body of it. The example below shows you just that.
The example also shows you how to go trough each attachment in the downloaded message.
/// <summary>
/// Example showing:
///  - how to fetch only headers from a POP3 server
///  - how to examine some of the headers
///  - how to fetch a full message
///  - how to find a specific attachment and save it to a file
/// </summary>
/// <param name="hostname">Hostname of the server. For example: pop3.live.com</param>
/// <param name="port">Host port to connect to. Normally: 110 for plain POP3, 995 for SSL POP3</param>
/// <param name="useSsl">Whether or not to use SSL to connect to server</param>
/// <param name="username">Username of the user on the server</param>
/// <param name="password">Password of the user on the server</param>
/// <param name="messageNumber">
/// The number of the message to examine.
/// Must be in range [1, messageCount] where messageCount is the number of messages on the server.
/// </param>
public static void HeadersFromAndSubject(string hostname, int port, bool useSsl, string username, string password, int messageNumber)
{
    // The client disconnects from the server when being disposed
    using (Pop3Client client = new Pop3Client())
    {
        // Connect to the server
        client.Connect(hostname, port, useSsl);

        // Authenticate ourselves towards the server
        client.Authenticate(username, password);

        // We want to check the headers of the message before we download
        // the full message
        MessageHeader headers = client.GetMessageHeaders(messageNumber);

        RfcMailAddress from = headers.From;
        string subject = headers.Subject;

        // Only want to download message if:
        //  - is from test@xample.com
        //  - has subject "Some subject"
        if(from.HasValidMailAddress && from.Address.Equals("test@example.com") && "Some subject".Equals(subject))
        {
            // Download the full message
            Message message = client.GetMessage(messageNumber);

            // We know the message contains an attachment with the name "useful.pdf".
            // We want to save this to a file with the same name
            foreach (MessagePart attachment in message.FindAllAttachments())
            {
                if(attachment.FileName.Equals("useful.pdf"))
                {
                    // Save the raw bytes to a file
                    File.WriteAllBytes(attachment.FileName, attachment.Body);
                }
            }
        }
    }
}