If you use Outlook, it can be done via Outlook Interop:
http://msdn.microsoft.com/en-us/library/ms268893(VS.80).aspx
The use is simple, but there is important "gotcha": your Inbox folder have many objects and they can be of diferent types, so you have to check type before you cast. Like this:
if (item is Microsoft.Office.Interop.Outlook.MailItem)
{
// This is email mesage
}
Note, that there are many folders and you can have subfolders inside inbox. To iterate all these you need to write a bit more code than bellow.
Here is just a simple example of how to print out all messages in your Inbox on just one level:
namespace EmailReader
{
using System;
using Microsoft.Office.Interop.Outlook;
class Program
{
static void Main(string[] args)
{
Application outlook = new Microsoft.Office.Interop.Outlook.ApplicationClass();
NameSpace mapiNameSpace = outlook.GetNamespace("MAPI");
MAPIFolder inbox = mapiNameSpace.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
foreach (Object item in inbox.Items)
{
if (item is Microsoft.Office.Interop.Outlook.MailItem)
{
MailItem mailItem = (MailItem)item;
Console.WriteLine(mailItem.Subject);
Console.WriteLine(mailItem.SentOn);
Console.WriteLine(mailItem.Body);
Console.WriteLine(mailItem.To);
Console.WriteLine(mailItem.CC);
Console.WriteLine("*********************************");
}
}
// outlook.Quit();
}
}
}
