1
私はMicrosoft.Office.Interop.Outlookを利用してコレクションを設定しています。私が現在扱っている受信箱には1万件を超えるメールがあります。私が検索した電子メールの数を制限する方法はありますか?受信トレイからプルされたメールの数を制限します。
public void InitializeInbox()
{
Outlook.Application app = new Outlook.Application();
Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
inboxFolder = outlookNs.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
outlookNs.SendAndReceive(true);
foreach (object _obj in inboxFolder.Items)
{
if (_obj is Outlook.MailItem)
{
receivedEmail.Add((Outlook.MailItem) _obj);
}
}
ConcurrentBag<EmailDTO> concurrentEmails = new ConcurrentBag<EmailDTO>();
Parallel.ForEach(
receivedEmail, mail =>
{
mail.ReplyAll();
concurrentEmails.Add(
new EmailDTO
{
Subject = mail.Subject,
Sender = mail.SenderName,
Body = mail.HTMLBody,
Date = mail.SentOn.Date
});
});
Inbox = new BindableCollection<EmailDTO>(concurrentEmails.OrderByDescending(x => x.Date));
}
したがって、inboxFolder.Itemsを検索する代わりに、制限を設定できます。たとえば、inboxFolder.Items.Where(x => x.Date >= DateTime.Now.AddYear(-1)
)
私はRestrictを使用して制限できますが、私は未読メールを制限するだけでした。
inbox.Items.Restrict("[Unread]=true");
日付で制限する方法を知りましたが、今ではエントリの数をどのように制限しますか?
日付でソートして
inboxFolder.Items.Restrict("[ReceivedTime] > '" + DateTime.Now.AddYears(-1).ToString("MM/dd/yyyy HH:mm") + "'")
明示的な制限を制限します。
List<Outlook.MailItem> receivedEmail = new List<Outlook.MailItem>();
const int limit = 200;
Outlook._Items items = inboxFolder.Items.Restrict("[ReceivedTime] >= '" + DateTime.Now.AddYears(-1).ToString("MM/dd/yyyy HH:mm") + "'");
items.Sort("[ReceivedTime]");
object item = items.GetNext();
int i = 1;
do
{
// not every item is a mail item
if (item is Outlook.MailItem)
{
receivedEmail.Add((Outlook.MailItem)item);
}
item = items.GetNext();
i++;
} while (null != item && i < limit);
こんにちは@ドミトリー、私は正常に昨年以内にトップ200の電子メールを照会することができましたが、私はそれが欲しいものではありませんかなりオーダーではなく、どのようにそれを行う上の任意のアイデアですか? – Master
まずItems.Sortを呼び出す必要があります。 Itemsオブジェクトを複数のドット表記を使用する代わりに、明示的な変数に格納するようにしてください(毎回まったく新しいCOMオブジェクトを提供します)。 –
こんにちは@Dmitry、私はコードを更新しました。私はどこが間違っているのか完全にはわからない。私はその並べ替えを設定した。最新のトップ200に問い合わせることができれば、受信時間の制限を取り除くことができます。 – Master