Use Expression.Since and Expression.SentSince along with Imap.Search method.
DateTime start = DateTime.Now.AddDays(-30);
List<long> uids = imap.Search(Expression.SentSince(start);
This returns back the UIDs within that range very quick.
You can combine 2 or more IMAP search expressions using Expresion.Or or Expresion.And.
Use Expression.Since to find emails whose internal date (disregarding time and timezone) is within or later than the specified date; Expression.SentSince to find messages whose [RFC-2822] Date: header (disregarding time and timezone) is within or later than the specified date. And matching Expression.Before and Expression.SentBefore queries.