Jag har visserligen enbart använt mig av Exchange Web Services Managed API på en Windows-plattform, men gissningsvis kan samma API användas av Mono på en Linux-plattform.
Du bör inte behöva något annat än följande för att kunna hämta ut kalenderposter från Exchange-servern: Användarnamn, Lösenord och en E-postadress.
Lite beroende på hur miljön du ska koppla upp dig mot är konfigurerad så kan du komma att behöva ange länken till Exchange-servern själv (om autodiscovery inte är korrekt konfigurerat). Man kan även använda sig av impersonifiering om man känner för det (d.v.s. öppna en helt annan användares brevlåda), dock kräver detta att användaren man loggar in som har den rollen på Exchange-servern.
API:et använder en webbservice på Exchange servern för att kommunicera med Exchange, så i praktiken kan man säkerligen skriva om koden till valfritt språk om man har lust eller ork. Potentiellt finns det redan sådana projekt, det är dock inget jag känner till.
Om du vill använda API:et så finns det att ladda ner här.
Nedanstående kodsnutt borde hämta ut kalenderposter för den aktuella dagen (från 00:00 till 00:00 nästkommande dag) och maximalt 10 poster. Mer information om API:et som finns här.
using Microsoft.Exchange.WebServices.Data;
using System;
using System.Net;
namespace MyApplication
{
class Program
{
static void Main(string[] args)
{
var service = new ExchangeService();
service.Credentials = new NetworkCredential("username@contoso.com", "MyPassword");
service.AutodiscoverUrl("user@contoso.com");
CalendarFolder calendar = CalendarFolder.Bind(service, WellKnownFolderName.Calendar, new PropertySet());
CalendarView view = new CalendarView(DateTime.Today, DateTime.Today.AddDays(1.0), 10);
FindItemsResults<Appointment> appointments = calendar.FindAppointments(view);
foreach (Appointment a in appointments)
{
Console.Write("Subject: " + a.Subject.ToString() + " ");
Console.Write("Start: " + a.Start.ToString() + " ");
Console.Write("End: " + a.End.ToString());
Console.WriteLine();
}
}
}
}