Search code examples
c#outlookoffice-interopoffice-automation

How To Only Retrieve Top X Items from Outlook Folder - Interop C#


I am writing a C# application where I want to loop through the 500 most recent emails in a given folder. The reason is because getting all the emails takes a long time using the below lines:

MAPIFolder folder = outlookApp.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox);
List<MailItem> items = folder.Items.OfType<MailItem>().ToList();

However, I know that what I am searching for each time is always going to be a recent email, so there's no need to get an entire year's worth of emails each time (over 8000, and I get less emails than the average employee at my job).

So, is there a way to only retrieve a certain amount of emails from a folder with Microsoft.Office.Interop.Outlook? Thanks in advance.


Solution

  • Iterating over all items in the folder is not really a good idea:

    List<MailItem> items = folder.Items.OfType<MailItem>().ToList();
    

    Instead, you need to use the Find/FindNext or Restrict methods of the Items class. They allow getting only items that correspond to your conditions. Read more about these methods in the following articles:

    Instead of getting recent 500 emails you may retrieve emails for a day, few days, week and etc. So, you can process items in bunch. For example:

    criteria = "[ReceivedTime] > '" _ 
             & Format$("6/12/20 3:30PM","General Date") & "'"
    

    You may find the Filtering Items Using a Date-time Comparison article helpful.