外部プロセスがExchangeメールボックスにメッセージを電子メールで送信します。その後、後続の処理のために電子メールメッセージを取得するExchange Web Services(EWS)2.0アプリケーションがあります。 EWSアプリケーションは、現在の日付に受信されたメッセージ、たとえば"received:today"
をAQS用語で取得するように設計されています。メッセージは、しかし、取得されることはありません - どれもFindItems
方法のItemView
に返されません:「受信:昨日の」この日付を変更し、EWS QueryStringが「受信」日付を1日遅らせます。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
// sharedMailbox is a FolderId type set to a valid well-known location not reproduced here
FindItemsResults<Item> findResults = service.FindItems(sharedMailbox,"(subject:flotsam) AND (received:today)", new ItemView(20));
ヒバリには最終的に所望のメッセージをキャッチしますが、検査メッセージのそれぞれについて、各メッセージの明示的な受信日はない昨日でしたが、今日:
Console.WriteLine(item.DateTimeReceived.ToLocalTime());
Console.WriteLine(item.DateTimeReceived.ToUniversalTime());
10/24/2016 1:05:38 AM
10/24/2016 6:05:38 AM
私は定数の翻訳に奇妙な疑いがあり、明示的な日付を提供することを選択しました。日付が昨日、はフェッチメッセージがを取得しました。このコードではあるが
FindItemsResults<Item> findResults = service.FindItems(sharedMailbox,"(subject:flotsam) AND (received:10/23/2016)", new ItemView(20));
:しかし、明示的に(むしろ「今日」や「昨日よりも)"received:MM/DD/YYYY"
形で受領日を定義するには、同じ結果を示しました今日(2011年10月24日)(ではなく、 10/23/2016)です。コードの指定が希望のメッセージを取得する必要があり今日、実際にフェッチ何メッセージ:受信:「昨日受け取っ」と」:実際に
FindItemsResults<Item> findResults = service.FindItems(sharedMailbox,"(subject:flotsam) AND (received:10/24/2016)", new ItemView(20));
は、明示的な日付はとまったく動作していません今日'querystringの値は、これらの定数が単にハードコーディングされた値にマップされていることを意味します。
私は、タイムゾーンの違い、またはUTCの変換の違いを疑ったが、私たちのローカルタイムゾーン「を受信:今日」を指定することを意味し、UTC背後であるべきで、現実には、メッセージをフェッチでの作業は、今日....受け取りました。
私は、取り出されたメッセージでこの1日の不一致がなぜ発生しているのかを知ることはできません。メッセージの日付解釈のどの部分が正しく処理されていませんか?
EDIT:コメント欄での提案あたり、私はNow
のDateTime
値マイナス1日DateTime.Nowから24時間(実際には、値を使用して、SearchFilter
オブジェクトを使用するFindItems
呼び出しを修正。これは、作成しました。 2016年10月23日に渡って今日ののメッセージを取得しました。
SearchFilter sf = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived, new DateTime.Now.AddDays(-1));
が合図を取る:だから私は、彼らが10月24日に受けたため、フィルタが実際にメッセージを発見した、または検索日付範囲が含まれているため(他の検索が動作するように引き起こされる)昨日のことを確認することができませんこのことから、私は明示的な時間要素なしDateTime
を使用するようにフィルタを変更:
SearchFilter sf = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived, new DateTime(2016,10,24));
この検索フィルタは今日受け取った両方のメッセージを返し、を働きました。これは、「今日」と「昨日」のキーワードで意味の乱れや不確実性を示唆する傾向があります。
可能であれば、AQSベースのソリューションを探したり、クエリ文字列の値が期待どおりに機能しない理由を理解している方がよいでしょう。
興味深いのは、 'FindItems'を' SearchFilter'で使うとどうなりますか? 'SearchFilter filter = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived、DateTime.Now-1);' –
良い質問です。私はあなたの提案を適用し、助言する。 –
@MarekFeketeあなたの提案の結果を反映した注釈をご覧ください。 「昨日」と「今日の」AQSキーワードの微妙なバグや特質があるようです。 –