Search code examples
c#asp.netemailopenpop

OpenPop.net get actual message text


I am using OpenPop.net to try and parse our links from all the emails that are in a given inbox. I found this method to get all the message:

    public static List<OpenPop.Mime.Message> FetchAllMessages(string hostname, int port, bool useSsl, string username, string password)
    {
        // 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);

            // Get the number of messages in the inbox
            int messageCount = client.GetMessageCount();

            // We want to download all messages
            List<OpenPop.Mime.Message> allMessages = new List<OpenPop.Mime.Message>(messageCount);

            // Messages are numbered in the interval: [1, messageCount]
            // Ergo: message numbers are 1-based.
            // Most servers give the latest message the highest number
            for (int i = messageCount; i > 0; i--)
            {
                allMessages.Add(client.GetMessage(i));                    
            }

            client.Disconnect();

            // Now return the fetched messages
            return allMessages;
        }
    }

Now I am trying to loop through each message but I cannot seem to figure out how to do it, I have this so far for my button:

    private void button7_Click(object sender, EventArgs e)
    {

        List<OpenPop.Mime.Message> allaEmail = FetchAllMessages("pop3.live.com", 995, true, "[email protected]", "xxxxx");

        var message = string.Join(",", allaEmail);
        MessageBox.Show(message);
    }

How would i loop through each entry in allaEmail so that i can display it in a MessageBox?


Solution

  • I can see that you use the fetchAllEmail example from the OpenPop homepage. A similar example showing how to get body text is also on the homepage.

    You might also want to look at how emails are actually structured. A email introduction exists for just this purpose.

    Having that said, I would do something similar to the code below.

    private void button7_Click(object sender, EventArgs e)
    {
        List<OpenPop.Mime.Message> allaEmail = FetchAllMessages(...);
    
        StringBuilder builder = new StringBuilder();
        foreach(OpenPop.Mime.Message message in allaEmail)
        {
             OpenPop.Mime.MessagePart plainText = message.FindFirstPlainTextVersion();
             if(plainText != null)
             {
                 // We found some plaintext!
                 builder.Append(plainText.GetBodyAsText());
             } else
             {
                 // Might include a part holding html instead
                 OpenPop.Mime.MessagePart html = message.FindFirstHtmlVersion();
                 if(html != null)
                 {
                     // We found some html!
                     builder.Append(html.GetBodyAsText());
                 }
             }
        }
        MessageBox.Show(builder.ToString());
    }
    

    I hope this can help you on the way. Notice that there is also online documentation for OpenPop.