1

C#プロジェクトとExchange2010サーバー間の通信にEWSマネージAPIを使用しています。このコードを使用して、今から3日前までに受信トレイ内のすべてのメールを取得します。

    var ews = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
    ews.Credentials = new NetworkCredential(usr, psw, dmn);
    ews.AutodiscoverUrl(url);

    PropertySet itempropertyset = new PropertySet(BasePropertySet.FirstClassProperties);
    itempropertyset.RequestedBodyType = BodyType.Text;

    ItemView view = new ItemView(int.MaxValue);
    FindItemsResults<Item> findResults;
    view.PropertySet = itempropertyset;

    do
    {
        findResults = ews.FindItems(WellKnownFolderName.Inbox, view);

        foreach (Item item in findResults.Items)
        {
            if (item.DateTimeCreated < DateTime.Now.AddDays(-3)) continue;

            item.Load(itempropertyset);

            var message = EmailMessage.Bind(ews, item.Id,
                new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.Attachments));

            string to = message.ToRecipients[0].Address.ToLower();
            string body = item.Body;
        }

        view.Offset += findResults.TotalCount;
    } while (findResults.MoreAvailable);

今問題。if (item.DateTimeCreated < DateTime.Now.AddDays(-3)) continue;これを使用すると、APIはすべてのメッセージを受信トレイから取得し、3日以上経過している場合は続行するため、この行を改善したいと思い ます。コードの早い段階でこのフィルターを指定したいので、APIはすべてのメッセージを処理する必要はありません。

4

1 に答える 1

11

問題を正しく理解していれば、これでうまくいくはずです。ここで利用可能なすべての検索フィルターを見ることができます: EWS検索フィルター

ItemView view = new ItemView(int.MaxValue);
FindItemsResults<Item> findResults;
view.PropertySet = itempropertyset;

SearchFilter searchFilter = 
   new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived, DateTime.Now.AddDays(-3));

findResults = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);
于 2013-03-21T21:49:01.950 に答える