Agregar eventos al calendario de Outlook con script php
events icalendar (6)
Quiero agregar eventos a mi calendario de Outlook desde el código php. Como Outlook puede aceptar un archivo de extensión ".ics", he intentado este código de muestra para generar un archivo ics:
<?php
header("Content-Type: text/Calendar");
header("Content-Disposition: inline; filename=calendar.ics");
echo "BEGIN:VCALENDAR/n";
echo "VERSION:2.0/n";
echo "PRODID:www.testMeiCalendar.net/n";
echo "METHOD:REQUEST/n"; // requied by Outlook
echo "BEGIN:VEVENT/n";
echo "DTSTART:20101231T230000/n";
echo "DTEND:20110101T010000/n";
echo "SUMMARY:New Years Eve Reminder/n";
echo "LOCATION:Downtown/n";
echo "DESCRIPTION:Let''s get together for New Years Eve/n";
echo "UID:ABCD1234/n";
echo "SEQUENCE:0/n";
echo "DTSTAMP:20101125T112600/n";
echo "END:VEVENT/n";
echo "END:VCALENDAR/n";
?>
Así que ahora cuando ejecuto este código en Firefox, recibí una ventana emergente solicitando abrir el archivo ics generado usando Microsoft Outlook y lo abrí y guardé en Outlook y finalmente se agregó un evento en Outlook.
Pero, ¿hay alguna manera de automatizar este proceso? Quiero decir, ¿puedo almacenar el evento en el calendario de Outlook directamente desde un script php, sin necesidad de generar un archivo ics y guardarlo?
¿Cómo su aplicación de servidor debería poder acceder a una aplicación cliente? Puede enviar un correo electrónico a su cliente con una entrada de calendario. Tal vez esto sea un poco más cómodo para su usuario.
No puedes.
PHP es un lenguaje de scripting para crear (principalmente) páginas web, y se ejecuta en servidores web. No puede modificar las computadoras de los usuarios.
Por cierto, no creo que puedas, de ninguna manera, insertar un evento en el calendario de un usuario sin algún tipo de interacción del usuario. Además de los motivos técnicos, se trata de un problema de seguridad, no se puede jugar con las computadoras de otras personas.
<?php
/**
* @category iCalendar
* @description Basic code for sending an event invitation.
* @version 1.0
*/
//Create ICAL Content (Google rfc 2445 for details and examples of usage)
//reference : http://www.mavetju.org/programming/outlook-ics.php
$message="BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20110718T121000Z
DTEND:20110718T131000Z
DTSTAMP:20110525T075116Z
ORGANIZER;CN=From Name:mailto:from email id
UID:12345678
ATTENDEE;PARTSTAT=NEEDS-ACTION;RSVP= TRUE;CN=Sample:mailto:[email protected]
DESCRIPTION:This is a test of iCalendar event invitation.
LOCATION: Kochi
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Test iCalendar
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR";
/*Setting the header part, this is important */
$headers = "From: From Name <From Mail>/n";
$headers .= "MIME-Version: 1.0/n";
$headers .= "Content-Type: text/calendar; method=REQUEST;/n";
$headers .= '' charset="UTF-8"'';
$headers .= "/n";
$headers .= "Content-Transfer-Encoding: 7bit";
/*mail content , attaching the ics detail in the mail as content*/
$subject = "Meeting Subject";
$subject = html_entity_decode($subject, ENT_QUOTES, ''UTF-8'');
/*mail send*/
if(mail("To email", $subject, $message, $headers)) {
echo "sent";
}else {
echo "error";
}
?>
Si aún no lo ha implementado, CalDAV (http://caldav.calconnect.org/) proporciona extensiones de calendario para WebDAV, si necesita agregar esta funcionalidad a su sitio. DAViCAL (http://www.davical.org/) parece ofrecer una solución a su problema, pero no lo he usado así que YMMV en él.
Jugué con esto y Outlook lo agregará automáticamente al calendario si lo envía como un correo electrónico y la dirección de correo electrónico es la misma que la configuración de la cuenta en Outlook. Tan pronto como Outlook descarga el mensaje, lo agrega automáticamente al calendario.
Hice esto con PHP, básicamente creando un evento ical inline en un archivo php separado que no requiere ninguna biblioteca adicional para aquellos de ustedes que todavía quieren hacerlo. Evento Outlook / iCal con PHP
Básicamente, me gustó esto
echo "BEGIN:VCALENDAR/n";
echo "VERSION:2.0/n";
echo "PRODID:-//YourSite//NONSGML YourSite//EN/n";
echo "METHOD:PUBLISH/n"; // required by Outlook
echo "BEGIN:VEVENT/n";
echo "UID:".date(''Ymd'').''T''.date(''His'')."-".rand()."-yoursite.com/n"; // required by Outlook
echo "DTSTAMP:".date(''Ymd'').''T''.date(''His'')."/n"; // required by Outlook
echo "DTSTART:$year"."$month"."$day"."T"."$time/n"; //20120824T093200 (Datetime format required)
echo "SUMMARY:$summary/n";
echo "DESCRIPTION: this is just a test/n";
echo "END:VEVENT/n";
echo "END:VCALENDAR/n";