0

Exchange Web サービス (EWS) マネージ API を使用してメールボックスから電子メールを読み取り、現在の電子メールの ItemId/UniqueId を指定して、受信トレイの次の電子メールの ItemId/UniqueId を返すメソッドを C# で記述する必要があります。現在のメール。

さらに、さまざまな理由から、メソッドを静的なステートレス メソッドにする必要があります。つまり、メソッドの呼び出し間で持続するメンバー/グローバル変数に依存することはできません。したがって、単純に FindItemsResults オブジェクトのインスタンスへの参照を格納して、メソッドが呼び出されるたびに次の Item に移動することはできません。

次のコードを使用してメソッドを実装しようとしました (簡略化された例のみで、エラー チェックはありません)。

using Microsoft.Exchange.WebServices;
using Microsoft.Exchange.WebServices.Data;
...
...
public string GetNextEmailId(string currentItemId)
{
    // set up Exchange Web Service connection
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
    service.AutodiscoverUrl("example.user@contoso.com");
    // create SearchFilter to find next email after current email
    ItemId itemId = new ItemId(currentItemId);
    SearchFilter sfNextEmail = new SearchFilter.IsGreaterThan(EmailMessageSchema.Id, itemId);
    // find next email in inbox
    ItemView itemView = new ItemView(1);
    itemView.OrderBy.Add(EmailMessageSchema.DateTimeReceived, SortDirection.Ascending);
    FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, sfNextEmail, itemView);
    // return unique ID of next email
    return findResults.Items[0].Id.UniqueId;
}

ただし、このメソッドを実行すると、service.FindItems 行から次の例外がスローされます。

System.ArgumentException: "検証に失敗しました。パラメーター名: searchFilter"
内部例外 - Microsoft.Exchange.WebServices.Data.ServiceValidationException: "'ItemId' 型の値を検索フィルターの比較値にすることはできません。"

1 つのオプションは、FindItems を使用して受信トレイ内のすべての電子メールを検索し、現在の電子メールが見つかるまで ItemId を確認してから、次の電子メールに移動して一意の ID を返すことです。しかし、これは遅くて非効率的である可能性が高いと思います。これを達成するためのより良い方法があることを願っています。

どんな助けや提案も大歓迎です。Webを検索しても解決策を見つけることができませんでした。

4

1 に答える 1

6

現在の電子メールのアイテムIDがわかっている場合は、それにバインドできます。

EmailMessage current = EmailMessage.Bind(service、id);

次に、現在の電子メールの受信日を取得します。それより後のすべての日付に対して検索フィルターを作成し、既に持っているコードで注文を使用します。

于 2010-08-11T14:53:09.490 に答える