Mit Skript auf Debian-Server prüfen, ob im Exchange-Account im Kalender für jeweils heute "Urlaub" steht
Moin zusammen,
ich möchte mit meinem Debian-Server prüfen, ob mein Exchange-Kalender für jeweils das aktuelle Datum einen Eintrag "Urlaub" enthält. Hintergrund: Ich steuere mit meinem Debian so einiges zu Hause und möchte keine 2 (bzw. 3) Kalender pflegen.
Ich habe schon mal Mailabfragen gemacht, aber beim Kalender geht es ja nicht per IMAP so weit ich weiß.
Hat jemand von euch einen Tipp, fertigen Code, oder einen Link, der mit helfen könnte?
Vielen Dank vorab.
Jensen
PS Frohes Fest und guten Rutsch an die Gemeinde hier.
ich möchte mit meinem Debian-Server prüfen, ob mein Exchange-Kalender für jeweils das aktuelle Datum einen Eintrag "Urlaub" enthält. Hintergrund: Ich steuere mit meinem Debian so einiges zu Hause und möchte keine 2 (bzw. 3) Kalender pflegen.
Ich habe schon mal Mailabfragen gemacht, aber beim Kalender geht es ja nicht per IMAP so weit ich weiß.
Hat jemand von euch einen Tipp, fertigen Code, oder einen Link, der mit helfen könnte?
Vielen Dank vorab.
Jensen
PS Frohes Fest und guten Rutsch an die Gemeinde hier.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 291418
Url: https://administrator.de/contentid/291418
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
11 Kommentare
Neuester Kommentar
Moin Jensen,
dafür gibts die Exchange Webservices(EWS), ob du dies nun mit PHP oder einer anderen Sprache umsetzt bleibt dir überlassen. Hier findest du schon zu 99% fertigen Code dafür
Exchange 2010 - bestimmte Kalendereinträge Abfragen und auf einer Webseite anzeigen lassen
Ebenso einen kollektiven Gruß zum Jahresendbesäufnis
jodel32
p.s. Danke für den Sixpack Bölkstoff
dafür gibts die Exchange Webservices(EWS), ob du dies nun mit PHP oder einer anderen Sprache umsetzt bleibt dir überlassen. Hier findest du schon zu 99% fertigen Code dafür
Exchange 2010 - bestimmte Kalendereinträge Abfragen und auf einer Webseite anzeigen lassen
Ebenso einen kollektiven Gruß zum Jahresendbesäufnis
jodel32
p.s. Danke für den Sixpack Bölkstoff
Hallo Jensen,
@114757 hat dir schon den richtigen Tipp gegeben. Mit EWS ist das kein Problem.
Du besorgst dir folgende PHP-Bibliothek und entpackst sie in den Root deines PHP-Webservers:
https://github.com/jamesiarmes/php-ews
Vorraussetzungen sind:
Dann erstellst du dir ein Skript mit folgendem Inhalt, wobei du SERVERNAME, USERNAME und PASSWORT in den Zeilen 17-19 anpasst
Wenn der String Urlaub im Betreff gefunden wird, gibt die Funktion true zurück, ansonsten false. Jetzt kannst du deine von dir gewünschte Aktion in der If-Abfrage am Ende des Skripts einbauen.
Frohes Fest und guten Rutsch
Grüße Uwe (@colinardo)
@114757 hat dir schon den richtigen Tipp gegeben. Mit EWS ist das kein Problem.
Du besorgst dir folgende PHP-Bibliothek und entpackst sie in den Root deines PHP-Webservers:
https://github.com/jamesiarmes/php-ews
Vorraussetzungen sind:
- PHP 5.2+
- cURL with NTLM support (7.23.0+ recommended)
Dann erstellst du dir ein Skript mit folgendem Inhalt, wobei du SERVERNAME, USERNAME und PASSWORT in den Zeilen 17-19 anpasst
<?php
require_once '/php-ews/NTLMSoapClient.php';
require_once '/php-ews/NTLMSoapClient/Exchange.php';
require_once '/php-ews/ExchangeWebServices.php';
require_once '/php-ews/EWSType.php';
require_once '/php-ews/EWS_Exception.php';
require_once '/php-ews/EWSType/DistinguishedFolderIdType.php';
require_once '/php-ews/EWSType/ItemQueryTraversalType.php';
require_once '/php-ews/EWSType/GetItemType.php';
require_once '/php-ews/EWSType/DefaultShapeNamesType.php';
require_once '/php-ews/EWSType/ItemResponseShapeType.php';
require_once '/php-ews/EWSType/CalendarViewType.php';
require_once '/php-ews/EWSType/NonEmptyArrayOfBaseFolderIdsType.php';
require_once '/php-ews/EWSType/DistinguishedFolderIdNameType.php';
function CheckForHoliday(){
$server = 'DEINSERVERNAME';
$username = 'USERNAME';
$password = 'PASSWORD';
$string_search = "Urlaub";
$ews = new ExchangeWebServices($server, $username, $password);
$request = new EWSType_GetItemType();
$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::DEFAULT_PROPERTIES;
$request->CalendarView = new EWSType_CalendarViewType();
$request->CalendarView->StartDate = date(DATE_W3C,mktime(0,0,0));
$request->CalendarView->EndDate = date(DATE_W3C,mktime(23,59,59));
$request->ParentFolderIds = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
$request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::CALENDAR;
$response = $ews->FindItem($request);
if ($response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView > 0){
$events = $response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->CalendarItem;
//echo "<pre>" . print_r($events,true) . "</pre>";
if(is_array($events)){
foreach ($events as $event){
if (preg_match("/" . preg_quote($string_search) . "/i",$event->Subject)){
return true;
}
}
}else if(is_object($events)){
if (preg_match("/" . preg_quote($string_search) . "/i",$events->Subject)){
return true;
}
}
}
return false;
}
if (CheckForHoliday()){
echo "Heute is Urlaub :-)";
}else{
echo "Heut is arbeit :-(";
}
?>
Frohes Fest und guten Rutsch
Grüße Uwe (@colinardo)
Jo, @colinardo, das ist natürlich mal wieder eine Steilvorlage so hat ich mir das auch vorgestellt.
N'Abend Jensen.
Ist das bei dir nicht der Fall musst du es natürlich auf ./ (Punkt Slash) zur Referenzierung des relativen Pfads umschreiben.
Zitat von @Jens4ever:
Nur um sicher zu gehen: Ich habe eh für Abfragen Curl drauf. Muss ich für Curl mit NTLM noch was nachinstallieren?
Nein, nur die minimal erforderliche Version von curl einhalten.Nur um sicher zu gehen: Ich habe eh für Abfragen Curl drauf. Muss ich für Curl mit NTLM noch was nachinstallieren?
"require_once '/php-ews/NTLMSoapClient.php';" verstehe ich so, dass die abfrage.php auf der selben Ebene liegen muss, wie das Directory "php-ews". Tut es.
Falsch. Ein führender Slash sagt wie immer aus das das php-ews Verzeichnis im Root des Webservers gesucht wird.Ist das bei dir nicht der Fall musst du es natürlich auf ./ (Punkt Slash) zur Referenzierung des relativen Pfads umschreiben.
Dann mach dir eine zusätzliche Function unter den bisherigen Code
Schönes Wochenende
Grüße Uwe
function WriteEventsToFile($filename){
$server = 'DEINSERVERNAME';
$username = 'USERNAME';
$password = 'PASSWORD';
$string_search = "Urlaub";
$ews = new ExchangeWebServices($server, $username, $password);
$request = new EWSType_GetItemType();
$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::DEFAULT_PROPERTIES;
$request->CalendarView = new EWSType_CalendarViewType();
$request->CalendarView->StartDate = date(DATE_W3C,mktime(0,0,0));
$request->CalendarView->EndDate = date(DATE_W3C,mktime(23,59,59));
$request->ParentFolderIds = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
$request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::CALENDAR;
$response = $ews->FindItem($request);
$allevents = ""
if ($response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView > 0){
$events = $response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->CalendarItem;
if(is_array($events)){
foreach ($events as $event){
$allevents .= $event->Subject ."\n";
}
}else if(is_object($events)){
$allevents = $event->Subject;
}
}
file_put_contents($filename, $allevents);
}
WriteEventsToFile("termine-heute.txt");
Geburtstag Colinardo
Bis dahin fließen noch ein paar Tage den Jordan runter Schönes Wochenende
Grüße Uwe