C# ile Microsoft Exchange Web Service Kullanarak Takvime Erişip Takvim Verilerini Almak

Merhaba arkadaşlar bugün sizler C# kodu ile Microsoft Exchange Web Servis kullanarak Outlook ta da yer alan Exchange üzerinde yer alan Takvimlerdeki dataların çekilmesinden bahsedeceğim.

İlk olarak Development yapacağımız yere Microsoft Exchange Web Services Managed API 2.0 indirerek kurmamız gerekmektedir.

Daha sonra oluşturduğumuz projede referans olarak “C:\Program Files\Microsoft\Exchange\Web Services\2.2” konumunda yüklenmiş olan “Microsoft.Exchange.WebServices.dll” DLL dosyasını projemize referans olarak ekliyoruz.

public static ExchangeService ConnectToService(string UserName, string UserPass, string DomainName, ExchangeVersion exchangeVersion, string Url, ITraceListener listener)
{
ExchangeService service = new ExchangeService(exchangeVersion);
if (listener != null)
{
service.TraceListener = listener;
service.TraceFlags = TraceFlags.All;
service.TraceEnabled = true;
}
service.Credentials = new NetworkCredential(UserName, UserPass, DomainName);
Console.Write(string.Format("Connect EWS URL for {0}. Please wait... ", UserName));
service.Url = new Uri(Url);
Console.WriteLine("Complete");
return service;
}

Yukarı daki methodu projemize ekliyoruz ve bu methoda kullanıcı adı, kullanıcı şifresi, domain adı, exchange versiyon türünü, exchange asmx servis adresini ve ITraceListener bilgilerini vererek belirttiğimiz kullanıcı üzerinden exhange server ımıza erişmiş oluyoruz.

ExchangeService service = ConnectToService(userName, userPassword, domainName, ExchangeVersion.Exchange2013, EwsAsmxUrl, null);
ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;

Yukarıda görüldüğü gibi exchange serverımıza bağlandık ve altkısımda da herhangi bir sertifikasyon hatasına yakalanmamak için her durumda validation dönüşümüzü true olarak belirliyoruz.

EmailAddressCollection myRoomLists = service.GetRoomLists();</pre>
foreach (EmailAddress myAddress in myRoomLists)
{
Console.WriteLine("Room name: {0}", myAddress.Name);
System.Collections.ObjectModel.Collection<EmailAddress> myRoomAddresses = service.GetRooms(myAddress);
foreach (EmailAddress address in myRoomAddresses)
{
Console.WriteLine("Email Address: {0}", address.Address);
Console.WriteLine("Name: {0}", address.Name);
}
}

Yukarıdaki kod ile exchange server a bağlandığınız kullanıcı ile paylaşılan odaları ve onlarda bulunan mail adreslerini listeleyebilir ve bu sayede hangi mail adreslerinin de verilerine erişe bileceğinizi görebilirsiniz.

ItemView view = new ItemView(5);
string querystring = "Subject:'Weekly Tennis Lesson'";
try
{
FindItemsResults<Item> masterResults = service.FindItems(WellKnownFolderName.Calendar, querystring, view);
foreach (Item item in masterResults.Items)
{
Appointment appointment = item as Appointment;
Console.WriteLine("Subject : " + appointment.Subject);
Console.WriteLine("Date : " + appointment.DateTimeCreated);
if (appointment.AppointmentType == AppointmentType.RecurringMaster)
{
Console.WriteLine("Appointment is the recurring master appointment.");
}
else
{
Console.WriteLine("Appointment is not part of a recurring series.");
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}

Yukarıdaki kodumuz ile servise bağlandığımız kullanıcının takvimine sorgu atarak istediğimiz kriterlerde takvim getirebiliriz.

&nbsp;
try
{
String MailboxToAccess = "";
DateTime startDate = new DateTime(2017, 6, 1);
DateTime endDate = new DateTime(2017, 8, 1);
CalendarView calView = new CalendarView(startDate, endDate);
FolderId CalendarFolderId = new FolderId(WellKnownFolderName.Calendar, MailboxToAccess);
FindItemsResults<Item> instanceResults = service.FindItems(CalendarFolderId, calView);
service.LoadPropertiesForItems(instanceResults, new PropertySet(
AppointmentSchema.Id,
AppointmentSchema.ICalUid,
AppointmentSchema.Subject,
AppointmentSchema.Start,
AppointmentSchema.End,
AppointmentSchema.IsAllDayEvent,
AppointmentSchema.DisplayTo,
AppointmentSchema.DisplayCc,
AppointmentSchema.Organizer,
AppointmentSchema.Categories,
AppointmentSchema.Location,
AppointmentSchema.RequiredAttendees,
AppointmentSchema.Sensitivity));
foreach (Item item in instanceResults.Items)
{
Appointment appointment = item as Appointment;
Console.WriteLine("Id : " + appointment.Id);
Console.WriteLine("Subject : " + appointment.Subject);
Console.WriteLine("Organizer Email : " + appointment.Organizer.Address);
Console.WriteLine("Date : " + appointment.DateTimeReceived);
Console.WriteLine("start : " + appointment.Start);
Console.WriteLine("end : " + appointment.End);
Console.WriteLine("location : " + appointment.Location);
Console.WriteLine("Organizer : " + appointment.Organizer);
Console.WriteLine("Duration : " + appointment.Duration);
Console.WriteLine("AllDay : " + appointment.IsAllDayEvent);
Console.WriteLine("DisplayTo : " + appointment.DisplayTo);
for (int j = 0; j < appointment.RequiredAttendees.Count; j++)
{
Console.WriteLine("Attendee Email : " + appointment.RequiredAttendees[j].Address);
}
if (appointment.AppointmentType == AppointmentType.Occurrence)
{
Console.WriteLine("Appointment is a recurring occurrence.");
}
else if (appointment.AppointmentType == AppointmentType.Exception)
{
Console.WriteLine("Appointment is an exception occurrence.");
}
else
{
Console.WriteLine("Appointment is not part of a recurring series.");
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}

Yukarıda ki kod kısmında ise “MailboxToAccess” değişkenine yazmış olduğunuz mail adresi ile belirlediğimiz tarihler arasında bulunan bu adresin exchange üzerindeki outlook takvimine erişerek oradaki dataları çekebiliriz.

Veya bu iki kodu karıştırarak istediğimiz mail adresine sorgu atarak belirlediğimiz kriterlere uyan takvim öğelerini getirtebiliriz.

3 thoughts on “C# ile Microsoft Exchange Web Service Kullanarak Takvime Erişip Takvim Verilerini Almak

Bir Cevap Yazın