Exchange Web Services Managed API SDK を使ってみた
前回のエントリで試した PowerShell を利用した CUI での Exchange Server への疎通はうまくいかなかった。今回は Exchange Web Services Managed API SDK の利用を検討してみた。
Exchange Web Services Managed API SDK は Exchange Server 2007 SP1 以降で利用可能であり、開発者側で理解しやすい API を用いて Exchange Server 側の情報を容易に操作することができる。
以下の様の NuGET で取得が可能であるため、簡単に取得することができる。今回はこちらを利用してオンプレ向けの Exchange Server に疎通を取ってみる。
- Exchange Web Services Managed API SDK 1.2.0 x64 https://www.nuget.org/packages/EWS.x64
- Exchange Web Services Managed API SDK 1.2.0 x86 https://www.nuget.org/packages/EWS.x86
上記の通り、32bit 版と 64bit 版があるので留意が必要だ。
Exchange Web Services Managed API SDK を利用した疎通を実施
Exchange Web Services Managed API SDK は NuGet 経由で取得できるため、以下の画面を参考に「Exchange」の文字列で検索して Exchange Web Services Managed API SDK を取得してほしい。
Exchange Web Services Managed API SDK のインストール後、以下のコードを記載して Exchange Server から予定を取得する。
using System; using System.Linq; using Microsoft.Exchange.WebServices.Data; namespace ExchangeConsoleApp { class Program { static void Main(string[] args) { // エンプラ向けに古いバージョンの Exchange Server を指定だが、用途に合わせてオプション指定 ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); // EWS のレスポンス情報をログに出力 service.TraceEnabled = true; service.TraceFlags = TraceFlags.All; // 環境によっては Autodiscover が無理だが、以下に Autodiscover を推奨する記載がある // http://msdn.microsoft.com/en-us/library/dn467891(v=exchg.150).aspx // service.AutodiscoverUrl("<ユーザ名>@<ドメイン>", RedirectionUrlValidationCallback); // Autodiscover を設定せず、直接 URI を指定する service.Url = new Uri(@"https://<Exchange Server アドレス>/EWS/Exchange.asmx"); service.Credentials = new WebCredentials("<ユーザ名>@<ドメイン>", "<パスワード>"); // 現在からひと月前~ひと月後を指定して予定を取得する var folder = CalendarFolder.Bind(service, WellKnownFolderName.Calendar); DateTime dtStart = DateTime.Today; dtStart = dtStart.AddMonths(-1); DateTime dtEnd = dtStart.AddMonths(1); var view = new CalendarView(dtStart, dtEnd); foreach (var appointment in folder.FindAppointments(view)) { Console.WriteLine("---------------------"); Console.WriteLine("Subject = {0}", appointment.Subject); Console.WriteLine("Start = {0}", appointment.Start); Console.WriteLine("End = {0}", appointment.End); Console.WriteLine("IsAllDayEvent = {0}", appointment.IsAllDayEvent); Console.WriteLine("IsReminderSet = {0}", appointment.IsReminderSet); if (appointment.IsReminderSet == true) { // appointment.IsReminderSet == true の状態で参照しないとエラーが出る Console.WriteLine("ReminderDueBy = {0}", appointment.ReminderDueBy); } } Console.WriteLine("!!!!!!!!! end !!!!!!"); Console.ReadLine(); } } }
上記のコードにおける「service.TraceEnabled = true; service.TraceFlags = TraceFlags.All;」の指定により、以下のように Exchange Server とのやり取りがログとして出力される。
さらに、標準出力には以下が出力され、無事に Exchange Server から予定が取得されていることが確認できる。
参考
- Exchange Server 2010 Web Services SDK
- Exchange Online 開発 : 自動検出 (Autodiscover) と EWS Managed API
- MSDN - Appointment class