La respuesta es sí. He escrito un AppleScript que convertirá el TZID incorrecto producido por Exchange en uno con el formato adecuado. Esto significa que el arreglo es sólo en Mac OS.
Tengo un post sobre esto, https://thefragens.com/ical-exchange-time-zone-fix-chapter-3/
Empecemos por el principio. A veces la integración de un Mac en el entorno corporativo es un poco difícil y requiere un poco de ingenio. Esto es especialmente cierto cuando se trata de Exchange. Las versiones actuales de iCal e iCal Server son compatibles con CalDAV e iCalendar. Sólo Outlook 2007 es compatible con CalDAV e iCalendar. Las versiones anteriores de Outlook no son compatibles y no funcionan bien con otras aplicaciones de calendario. Aquí está la información zona horaria (TZID) y la especificación de cómo debe formatearse . Puedes ver al mirarlo que el TZID que produce Outlook no es compatible.
Una rápida búsqueda en Google muestra un artículo o dos que lo explican muy bien.
He descubierto que hay al menos 3 tipos diferentes de invitaciones que pueden ser enviadas por Exchange/Outlook.
METHOD:REQUEST
- Se trata del habitual correo electrónico en el que se solicita la asistencia a una reunión.
METHOD:PUBLISH
- Se trata esencialmente de un anuncio de publicación de un evento. No le pide que responda.
METHOD:CANCEL
- Este es un aviso de cancelación de un evento.
Además, he comprobado que los correos electrónicos que contienen estas invitaciones están formados de al menos 3 maneras diferentes. A veces el evento del calendario está dentro del cuerpo del mensaje y está codificado con Content-Transfer-Encoding
en cualquiera de los dos casos 8bit
o quoted-printable
. Siempre el .ics
se adjunta el archivo.
Mi script hace lo siguiente:
- Analiza el mensaje para extraer los datos del calendario del cuerpo del mensaje o del
.ics
apéndice.
- A continuación, se calcula si la invitación es del tipo
METHOD:REQUEST
, METHOD:PUBLISH
o METHOD:CANCEL
.
- Si la invitación es de uno de los dos primeros tipos. La zona horaria se fija y el evento se importa a iCal. Es posible que tenga que seleccionar en qué calendario se importará el evento.
-
Si la invitación es del tipo METHOD:CANCEL
entonces el script localizará el evento correspondiente y establecerá su estado como cancelado.
- Tendrá que eliminar manualmente el evento. En iCal aparecerá con un estilo de letra blanco tachado.
- Los eventos que se repiten parecen tener todos el mismo UID (identificador único).
No sé por qué. Cada evento que se repita se marcará así como cancelado. A continuación, borrará manualmente el evento específico y ejecutará manualmente el script de nuevo mientras se selecciona el mensaje de cancelación. Esto restablecerá el resto de los eventos que se repiten como confirmados. Sí, sé que esto es un poco de un kludge pero no tengo un método mejor.
- Analizará el mensaje para permitir las invitaciones de varios servidores de Exchange.
Mi guión, ahora renombrado iCal-Invite-Fix.scpt
, tendrá que personalizarse para cada servidor de Exchange del que reciba invitaciones. Hay 3 propiedades al principio del script. Son las siguientes exchange_fragment
, ical_tzid
y myCalendar
. Estas dos primeras propiedades son listas y el orden de los elementos es crucial. El elemento específico (posición en la lista) de cada lista debe corresponder a cada uno.
exchange_fragment
es un fragmento único del TZID que envía su servidor Exchange.
ical_tzid
es la zona horaria del servidor Exchange en el formato adecuado.
- Esto significa que no hay espacios, aunque los espacios se sustituyen automáticamente por el guión bajo '_'.
- Por ejemplo, estoy en el sur de California y la zona horaria correcta debería escribirse como
US/Pacific
o America/Los_Angeles
. Puede encontrar esta información seleccionando el menú desplegable de zonas horarias en la esquina superior derecha de la ventana de iCal y seleccionando Other...
. Si busca en la esquina superior derecha de iCal la barra de menú de la zona horaria, el último ejemplo aparecerá como America/Los Angeles
.
myCalendar
es el nombre del calendario que normalmente recibe los eventos. Es necesario para que la cancelación funcione.
Como muestra la imagen anterior, ahora sólo hay 2 propiedades, ambas son listas. Estas listas funcionan juntas como un array; lo que significa que el orden de los elementos de la lista es crucial.
exchange_fragment
contiene fragmentos únicos del TZID que envía el servidor de Exchange.
ical_tzid
contiene la información tzid que iCal espera ver.
Guarde el script y configúrelo para que se ejecute desde una regla de correo o como yo lo llamo desde el menú System AppleScript. Deberá guardar el script en la carpeta ~/Library//Applications/Mail/. Cree esta carpeta si no existe.
Para configurar el script para que se ejecute automáticamente, deberá crear una nueva regla de correo como se indica a continuación.
- Correo -> Preferencias -> Reglas -> Añadir regla
- Descripción "iCal Invite Fix"
- Si se cumple "alguna" de las siguientes condiciones:
- "Cualquier nombre de archivo adjunto" "termina con" ".ics"
- Realice las siguientes acciones:
- Ejecute AppleScript "~/Library/scripts/Applications/Mail/iCal-Invite-Fix.scpt"
- Haga clic en "Aceptar" y luego en "Aplicar".
También puede ejecutar el script manualmente desde el menú script del sistema. Para instalar este menú. Abra el menú /Applications/AppleScript/AppleScript Utility.app
y comprueba el Show Script menu in menu bar
caja. Si pones el script en la ubicación de la carpeta indicada anteriormente, ahora será visible cuando Mail.app sea la aplicación actual.
Descargar el iCal-Invite-Fix script .
Por favor, hazme saber si hay algún problema o necesitas ayuda para configurarlo. El script no fue enteramente mi creación y el mérito es también de otros . Estoy seguro de que cualquier error es probablemente mío ;-)
Actualizado el 28/12/2008 : Se ha añadido la posibilidad de utilizar un único script con varios servidores Exchange. La contrapartida es una configuración ligeramente más compleja.