10

Exchange Web サービスを使用してメールボックスに接続し、 FindItemsSearchFilterを使用して、特定の条件に一致するメッセージを探しています。

次のように、「送信元」のメール アドレスでフィルタリングされたメールボックスでメールを取得できます。

var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1)
            {
                TraceEnabled = true,
                Credentials = new WebCredentials(username, password)
            };

var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From, "some@email.com");

service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50))

そして、次のDisplayToようにプロパティをフィルタリングできます。

var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.DisplayTo, "display name");

しかし、私が知る限り、受信者の表示名のみを検索します。メールアドレスやドメイン名で検索したい。

これは、次のようになると予想される場合に結果を返しません。

var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.ToRecipients, "some@email.com");

指定した電子メール アドレスが受信者リストに含まれているすべての電子メールを検索することはできますか?

4

3 に答える 3

8

SearchFilter を使用して、受信者の電子メール アドレスに基づいて電子メールを検索する方法が見つかりませんでした。

クエリ文字列を取る ExchangeService.FindItems の別のオーバーロードを使用することは可能です。

To または Cc フィールドにアドレスが含まれるメールを検索する

var contactEmailAddress = "some@email.com";

var querystring = string.Format("Participants:={0}", contactEmailAddress);

service.FindItems(WellKnownFolderName.Inbox, queryString, view);

From、To、または Cc フィールドにアドレスが含まれるメールを検索する

var contactEmailAddress = "some@email.com";

var querystring = string.Format("(From:={0} OR Participants:={0})", contactEmailAddress);

service.FindItems(WellKnownFolderName.Inbox, queryString, view);

この機能には Exchange 2010 が必要だと思います。

クエリ構文に関する追加リソース:

于 2013-09-04T15:43:13.973 に答える
6

正しいフォルダー、つまり送信済みアイテムにアクセスしていないことが原因である可能性があります。

交換

service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50))

service.FindItems(WellKnownFolderName.SentItems, filter, new ItemView(50))

編集:最初の質問を誤解しました。次の MSDN ブログをご覧ください: http://blogs.msdn.com/b/akashb/archive/2010/03/05/how-to-build-a-complex-search-using-searchfilter- and-searchfiltercollection-in-ews-managed-api-1-0.aspx EWS を使用して複雑な検索を行う方法について説明します

于 2013-09-04T15:26:17.590 に答える
1

FindItemsメソッドまたはFindItem操作を拡張して、 ToRecipientsCcRecipientsBccRecipientsなどの追加のプロパティや要素を取得することはできないことに注意してください。これらの値を取得する必要がある場合は、FindItems メソッドまたは FindItem 操作を使用して電子メールのアイテム ID を取得してから、Bind メソッドまたは GetItem 操作を使用して必要なプロパティを取得します。参照: MSDN 電子メールのプロパティ

これが私がやった方法です:

 ItemView view = new ItemView(200);
    view.PropertySet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.DateTimeSent);

    List<SearchFilter> searchFilterCollection = new List<SearchFilter>();   
    searchFilterCollection.Add(new SearchFilter.IsGreaterThanOrEqualTo(EmailMessageSchema.DateTimeSent, LastServiceRun)); //Fetching recently sent emails 
    //In case you want to have more than one filter    
    SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFilterCollection);

    FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.SentItems, searchFilter, view);

    foreach (Microsoft.Exchange.WebServices.Data.EmailMessage item in results)
    {
        PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.ToRecipients);

        EmailMessage sentEmail = (EmailMessage)Item.Bind(service, item.Id, propSet);

        if (sentEmail.ToRecipients.Any(sEmail => sEmail.Address == mySearchEmailAddress))
        {
            //An email found where an address is in the To field - Your logic comes here
        }

    }`
于 2017-06-29T09:18:04.417 に答える