Termin in Outlook eintragen

brainsucker

Erfahrenes Mitglied
Hallo zusammen,

ich habe auf einer Website eine Eventübersicht integriert. Was ich hierzu ganz schick fände wäre ein Icon / oder Button der bei anklicken den Termin in den Outlook Kalender einträgt. (Natürlich zu dem korrekten Zeitpunkt)

Ist so etwas mit PHP realisierbar, bzw wenn ja wie ?

viele Grüße

brainsucker
 
Ich denke nicht, dass so etwas realisierbar ist, da PHP nicht einfach so Daten an Programme schicken kann.

Ich würde es eher so machen, dass du den Termin in einem Outlook kompatiblen Format speicherst und dann dem User als Download anbietest/schickst, welche er dann bequem in Outlook importieren kann.
 
Ich habe zwar kein Outlook zum testen, aber es bieten ja noch mehr Webseiten so etwas an.

erstelle wie hier: http://www.astronomie.info/calsky/Satellites/index.html/15

eine php datei die einen header sendet und dem Browser sagt es es sich hier um eine vcs datei handelt. Und dann eben die Syntax wie hier auch in das File schreiben:

Code:
BEGIN:VCALENDAR
PRODID:-//A. Barmettler CalSky.com//ICS-VCS-Exporter//EN
VERSION:1.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:269255022375491
CLASS:PRIVATE
CATEGORIES:CALSKY
ATTACH;VALUE=URL:http://www.CalSky.com/
DTSTART:20070613T150257Z
DTEND:20070613T150257Z
SUMMARY:CS: SL-04 ROCKET B Cat:31596 2007-022B - Forecasted decay of earth orbiting object in the atmosphere.
DESCRIPTION:SL-04 ROCKET B Cat:31596 2007-022B\n\nForecasted decay of earth orbiting object in the atmosphere.\nOrbit data for calculation from 11.06.2007 06:30:00 UTC.\nVisibility latitude interval: +/-67.1 deg\n\nMore details: http://www.calsky.com/csrender.cgi?object=Satellite&number=3&obs=33627354384316&tdt=2454265.12780079&sat=31596&tracker=\n\nIf you use these entries\, please support us: https://www.paypal.com/xclick/business=info%40calsky.com&item_name=CalSky
END:VEVENT
END:VCALENDAR

Mit ein bisschen testen sollte das nicht weiter schwierig sein. Vielleicht findest du in der Microsoft msdn noch genauere hinweise was möglich ist.
 
So ich hab jetzt mal folgendes gemacht:

PHP:
<?
$datum = $result[beginn]; // Die Variable kommt aus einer Datenbank und wurde mit srtotime() erstellt und in die DB eingetragen
$inhalt = "
BEGIN:VCALENDAR
PRODID:-//A. Barmettler CalSky.com//ICS-VCS-Exporter//EN
VERSION:1.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:269255022375491
CLASS:PRIVATE
CATEGORIES:CALSKY
ATTACH;VALUE=URL:http://www.CalSky.com/
DTSTART: ". $datum ."
DTEND:20070613T150257Z
SUMMARY:CS: SL-04 ROCKET B Cat:31596 2007-022B - Forecasted decay of earth orbiting object in the atmosphere.
DESCRIPTION:SL-04 ROCKET B Cat:31596 2007-022B\n\nForecasted decay of earth orbiting object in the atmosphere.\nOrbit data for calculation from 11.06.2007 06:30:00 UTC.\nVisibility latitude interval: +/-67.1 deg\n\nMore details: http://www.calsky.com/csrender.cgi?object=Satellite&number=3&obs=33627354384316&tdt=2454265.12780079&sat=31596&tracker=\n\nIf you use these entries\, please support us: https://www.paypal.com/xclick/business=info%40calsky.com&item_name=CalSky
END:VEVENT
END:VCALENDAR


";
$fp = "../outlook/test.vcs";
$f = fopen($fp,"w+");
fwrite($f,$inhalt);
fclose($f);
//$Filename = "Termin" . $datum . ".vcs";
header("Content-Type: text/x-vCalendar");
header("Content-Disposition: inline; filename=$fp ");
?>

Könnte so etwas funktionieren?
 
Normal sollte es en wo bei du dann schnell merkst das du den $inhalt noch mal nl2br($inhalt); machen solltest um auch wirklich wie in der Variable $inhalt ausgeben bzw. geschrieben es in deiner VCard

PHP:
<?
$datum = $result[beginn]; // Die Variable kommt aus einer Datenbank und wurde mit srtotime() erstellt und in die DB eingetragen
$inhalt = "
BEGIN:VCALENDAR
PRODID:-//A. Barmettler CalSky.com//ICS-VCS-Exporter//EN
VERSION:1.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:269255022375491
CLASS:PRIVATE
CATEGORIES:CALSKY
ATTACH;VALUE=URL:http://www.CalSky.com/
DTSTART: ". $datum ."
DTEND:20070613T150257Z
SUMMARY:CS: SL-04 ROCKET B Cat:31596 2007-022B - Forecasted decay of earth orbiting object in the atmosphere.
DESCRIPTION:SL-04 ROCKET B Cat:31596 2007-022B\n\nForecasted decay of earth orbiting object in the atmosphere.\nOrbit data for calculation from 11.06.2007 06:30:00 UTC.\nVisibility latitude interval: +/-67.1 deg\n\nMore details: http://www.calsky.com/csrender.cgi?object=Satellite&number=3&obs=33627354384316&tdt=2454265.12780079&sat=31596&tracker=\n\nIf you use these entries\, please support us: https://www.paypal.com/xclick/business=info%40calsky.com&item_name=CalSky
END:VEVENT
END:VCALENDAR


";

$inhalt = nl2br($inhalt);
$fp = "../outlook/test.vcs";
$f = fopen($fp,"w+");
fwrite($f,$inhalt);
fclose($f);
//$Filename = "Termin" . $datum . ".vcs";
header("Content-Type: text/x-vCalendar");
header("Content-Disposition: inline; filename=$fp ");
?>
 
danke der tipp war sehr brauchbar,

allerdings kommt beim öffnen der vcs datei ein fehler der besagt dass die datei ungültig sei.

Ich vermute es liegt daran dass ich ihm einen Timestamp gebe, er aber nichts damit anfangen kann. (falsche format oder so.)

Hat da jemand nützliche Infos / Hilfe ?
 
Versuch es damit mal wenn du das Datum und Zeit im TimeStamp hast:

PHP:
<?
$datum = $result['beginn']; // Die Variable kommt aus einer Datenbank und wurde mit srtotime() erstellt und in die DB eingetragen
$datum = date("d.m.Y, H:i", $datum);
$inhalt = "
BEGIN:VCALENDAR
PRODID:-//A. Barmettler CalSky.com//ICS-VCS-Exporter//EN
VERSION:1.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:269255022375491
CLASS:PRIVATE
CATEGORIES:CALSKY
ATTACH;VALUE=URL:http://www.CalSky.com/
DTSTART: ". $datum ."
DTEND:20070613T150257Z
SUMMARY:CS: SL-04 ROCKET B Cat:31596 2007-022B - Forecasted decay of earth orbiting object in the atmosphere.
DESCRIPTION:SL-04 ROCKET B Cat:31596 2007-022B\n\nForecasted decay of earth orbiting object in the atmosphere.\nOrbit data for calculation from 11.06.2007 06:30:00 UTC.\nVisibility latitude interval: +/-67.1 deg\n\nMore details: http://www.calsky.com/csrender.cgi?object=Satellite&number=3&obs=33627354384316&tdt=2454265.12780079&sat=31596&tracker=\n\nIf you use these entries\, please support us: https://www.paypal.com/xclick/business=info%40calsky.com&item_name=CalSky
END:VEVENT
END:VCALENDAR


";

$inhalt = nl2br($inhalt);
$fp = "../outlook/test.vcs";
$f = fopen($fp,"w+");
fwrite($f,$inhalt);
fclose($f);
//$Filename = "Termin" . $datum . ".vcs";
header("Content-Type: text/x-vCalendar");
header("Content-Disposition: inline; filename=$fp ");
?>
 
Also als erstes... warum in aller herrgottsnamen nnl2br() o.O das ist keine HTML Datei die der Browser einlesen soll, sondern ein Format für Outlook

Das Datumsformat kommt auch nicht mit dem hin was du geschrieben hast "20070613T150257Z" also date('Ymd\THis\Z')

Des weiteren keine Ahnung warum du den Server zumüllen willst mit Dateien die eh bei jedem Aufruf neu geschrieben werden, warum nicht gleich einfach ausgeben:

PHP:
<?
/* testdaten ******************************
$result['begin'] = time();
$result['ueberschrift'] = "das ist ein test
wie das funktioniert";
$result['text'] = "Lange beschreibung 
was in deinem Outlookding dann eben
stehen soll";
**************************************** */

$id       = $result['id'];
$beginn   = date('Ymd\THis\Z', $result['beginn']);
$ende     = date('Ymd\THis\Z', $result['ende']);
$url      = "www.deineseite.de";
$headline = str_replace("\n", "\\n", $result['ueberschrift']);
$inhalt   = str_replace("\n", "\\n", $result['text']);

$inhalt = "BEGIN:VCALENDAR
PRODID:-//$url//VCS-Exporter//DE
VERSION:1.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:$id
CLASS:PRIVATE
CATEGORIES: Errinerungen
ATTACH;VALUE=URL:$url
DTSTART: $datum
DTEND:$ende
SUMMARY: $headline
DESCRIPTION: $inhalt
END:VEVENT
END:VCALENDAR";

header("Content-Type: text/x-vCalendar");
echo $inhalt;
?>

PS: achja die RFC zu den VCards: http://tools.ietf.org/html/rfc2445
 
Zuletzt bearbeitet:
So ich denke wir kommen dem gnazen nun etwas näher. Folgender Code:

PHP:
<?

$result['beginn'] = time();
$result['ende'] = time();
$result['ueberschrift'] = "das ist ein test wie das funktioniert";
$result['text'] = "Lange beschreibung was in deinem Outlookding dann eben stehen soll";


$id       = 4711;
$beginn   = date('Ymd\THis\Z', $result['beginn']);
$ende     = date('Ymd\THis\Z', $result['ende']);
$url      = "www.deineseite.de";
$headline = str_replace("\n", "\\n", $result['ueberschrift']);
$inhalt   = str_replace("\n", "\\n", $result['text']);

$inhalt = "BEGIN:VCALENDAR
PRODID:-//$url//VCS-Exporter//DE
VERSION:1.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:$id
CLASS:PRIVATE
CATEGORIES: Errinerungen
ATTACH;VALUE=URL:$url
DTSTART: $beginn
DTEND:$ende
SUMMARY: $headline
DESCRIPTION: $inhalt
END:VEVENT
END:VCALENDAR";

header("Content-Type: text/x-vCalendar");
echo $inhalt;
?>


ergibt folgende ausgabe:

BEGIN:VCALENDAR
PRODID:-//www.deineseite.de//VCS-Exporter//DE
VERSION:1.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:4711
CLASS:PRIVATE
CATEGORIES: Errinerungen
ATTACH;VALUE=URL:http://www.deineseite.de
DTSTART: 20070612T112351Z
DTEND:20070612T112351Z
SUMMARY: das ist ein test wie das funktioniert
DESCRIPTION: Lange beschreibung was in deinem Outlookding dann eben stehen soll
END:VEVENT
END:VCALENDAR


Nun soll er das aber halt noch in das Outlook eintragen. Das geht noch nicht. Ideen?
 
Ruft er denn Outlook auf wenn du die Datei anklickst (habe es nicht installiert), eine ausgabe sollte ja nicht stattfinden, außer der Content Type ist falsch bzw nicht richtig erkannt.
 
Zurück