1

私はOffice 365 Mail APIを使用しています。私の目標は、ユーザーが今日送信(1.) および受信(2.)した電子メール メッセージの総数を取得することです。

これを行うには、最初にOffice 365 API Playgroundでいくつかのクエリを作成して試し、実行しました。

  1. https://outlook.office.com/api/v2.0/me/mailfolders/sentitems/messages?$filter=sentdatetime%20ge%202015-12-10T08:00:00.000Z&$select=Subject,CreatedDateTime,ToRecipients
  2. https://outlook.office.com/api/v2.0/me/messages?$count=true&$filter=receiveddatetime%20ge%202015-12-09T10:00:00.000Z&$select=Subject,CreatedDateTime,ToRecipients

現在、OutlookServicesClient API を使用してこれらのクエリを作成するのに苦労しています。非常に単純なクエリを超える多くの例は見つかりませんでした...私がこれまでに持っているもの:

  1. var mailResults = await client.Me.MailFolders.Where(f => f.DisplayName == "Sent Items").ExecuteAsync();これはまだメッセージだけを返し、現在の日付でフィルター処理するわけではありません。

  2. var mailResults = await client.Me.Messages.Where(m => m.ReceivedDateTime.Value == date.UtcDateTime).ExecuteAsync();多くのメールを受信したにもかかわらず、結果が返されません。さらに、'Cluster'、'Deleted Items'、'Junk Email' フォルダに受信したメールを除外したいと考えています。

一般に、他の言語のコードを変更する必要があるため、英語のフォルダー名でフィルター処理することが適切かどうかはわかりません。送信済みアイテム、迷惑メール、クラスターなどの特別な Outlook フォルダーに特別な ID はありますか?

さらに、私の 2 つのリクエストを解決するために、すべてのメールを取得して自分でフィルタリングを処理することもできましたが、それは効率的ではなく、API は既にフィルタリングをサポートしています (生のリクエストで見られるように)。それらをOutlookServicesClient APIで使用します。

4

1 に答える 1

3

通常、 LINQ を使用してクエリを作成するため、メソッドを使用してクエリ パラメーターを作成OutlookServicesClientする必要があります。たとえば、今日受信したすべてのメッセージを取得したい場合は、次のようにします。Where$filter

DateTimeOffset startOfDay = DateTimeOffset.Now.Date.ToUniversalTime();

client.Me.Messages.Where(m => m.ReceivedDateTime >= startOfDay).ExecuteAsync();

あなたの質問について:

  1. フォルダーの名前でフィルタリングしないでください。API には、受信トレイ、削除済みアイテム、送信済みアイテム、および下書きの一定のフォルダー ID があります。したがって、送信済みアイテム フォルダーを取得するには、次のようにします。

    client.Me.MailFolders.GetById("SentItems")
    
  2. Where(m => m.ReceivedDateTime.Value == date.UtcDateTime)datetime 値が定数と等しいことをテストしているため、クエリは値を返しません。これは結果を返すことはほとんどありません。比較は秒レベルまで下がるため、変数の日付と時刻に正確dateにメッセージを受信しない限り、一致するものはありません。

あなたの意図に一致すると思われるいくつかのクエリを書きました:

DateTimeOffset startOfDay = DateTimeOffset.Now.Date.ToUniversalTime();

var receivedMessages = await client.Me.Messages
  // $orderby=ReceivedDateTime desc
  .OrderByDescending(m => m.ReceivedDateTime)
  // $filter=ReceivedDateTime ge 2015-12-11T05:00:00Z
  .Where(m => m.ReceivedDateTime >= startOfDay)
  // $top=10
  .Take(10)
  // $select=Subject,ReceivedDateTime,From
  .Select(m => new { m.Subject, m.ReceivedDateTime, m.From })
  .ExecuteAsync();

string resultMessage = "";
foreach (var message in receivedMessages.CurrentPage)
{
  resultMessage += "Received: " + message.ReceivedDateTime.ToString() + " from " + message.From.EmailAddress.Address
                   + ": " + message.Subject + "\n";
}

MessageBox.Show(resultMessage, "Received messages");

var sentMessages = await client.Me.MailFolders.GetById("SentItems").Messages
  // $orderby=SentDateTime desc
  .OrderByDescending(m => m.SentDateTime)
  // $filter=SentDateTime ge 2015-12-11T05:00:00Z
  .Where(m => m.SentDateTime >= startOfDay)
  // $top=10
  .Take(10)
  // $select=Subject,ReceivedDateTime,From
  .Select(m => new { m.Subject, m.SentDateTime, m.ToRecipients })
  .ExecuteAsync();

resultMessage = "";
foreach (var message in sentMessages.CurrentPage)
{
  resultMessage += "Sent: " + message.SentDateTime.ToString() + " to " + message.ToRecipients.Count
                 + " recipients: " + message.Subject + "\n";
}

MessageBox.Show(resultMessage, "Sent messages");
于 2015-12-11T15:53:32.197 に答える