¿Cómo recibir invitaciones a reuniones de Office365, para que puedan analizarse y agregarse a un calendario?

10

¿Cómo recibir invitaciones a reuniones de iCalendar (.ics o .ical) de outlook.office365.com, para que puedan analizarse y agregarse a un calendario (como remind + wyrd)?

He buscado larga y duramente una respuesta, pero no he encontrado ninguna, así que me pregunto si me estoy perdiendo algo realmente trivial.

Estoy usando Mutt 1.5.22 con OfflineIMAP 6.5.5 en Fedora 20 (Heisenbug).

Existen muchos scripts para analizar los mensajes de iCalendar en formatos que se pueden importar a los calendarios. Este no es mi problema. Mi problema es que ni siquiera estoy recibiendo mensajes de iCalendar, así que no tengo nada que analizar.

Una invitación a la reunión llega a mi bandeja de entrada como mensaje de texto / html codificado en base64. Es no un mensaje de varias partes y hay no hay archivos adjuntos . El cuerpo del mensaje contiene un enlace a Microsoft Outlook Web Access (OWA). Seguir el enlace no parece hacer nada excepto llevarme a WebMail. El resto del cuerpo del correo electrónico contiene la descripción de la invitación a la reunión.

Intenté reenviar la invitación y reenviar la invitación como un archivo adjunto, pero ninguno de estos afectó el formato del mensaje.

Inspeccioné los encabezados del mensaje, pero nada se destacó como importante. Los he copiado aquí, en caso de que signifiquen algo para alguien:

Received: from [...] by [...] with Microsoft SMTP Server (TLS) id
        [...] via Mailbox Transport; [timestamp]
Received: from [...] by [...] with Microsoft SMTP Server (TLS) id
        [...]; [timestamp]
Received: from [...] by [...] with Microsoft SMTP Server (TLS) id
        [...]; [timestamp]
Received: from [...] by [...] with mapi id [...]; [timestamp]
From: [meeting organiser]
To: [meeting attendees]
Subject: [meeting subject]
Thread-Topic: [meeting subject]
Thread-Index: [...]
Sender: [sender on behalf of meeting organiser]
Date: [timestamp]
Message-ID: <[...]>
Accept-Language: en-US
Content-Language: en-US
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 03
X-MS-Exchange-Organization-AuthSource: [...]
X-MS-Has-Attach:
X-MS-Exchange-Organization-SCL: -1
X-MS-TNEF-Correlator:
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0

También inspeccioné los encabezados del mensaje en WebMail. Hubo más encabezados (algunos relacionados con tnef), pero nuevamente, nada parecía relacionado con calendarios o invitaciones.

Comparé los encabezados de una "invitación a una reunión" con los encabezados de un correo electrónico normal. La única diferencia era que un correo electrónico normal contiene un encabezado adicional: "X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply".

El filtro de carpeta de mi .offlineimaprc está configurado para no sincronizar la carpeta Calendario. Esto se debe a que cada vez que OfflineIMAP intenta sincronizar, se encuentra con más de cien instancias del mismo error al sincronizar la carpeta Calendario: "ERROR: el servidor IMAP 'remoto' no tiene un mensaje con UID '[...]' ".

Usando imaplib de Python para inspeccionar la carpeta Calendario:

>>> import imaplib
>>> i = imaplib.IMAP4_SSL("outlook.office365.com", 993)
>>> i.login("[email protected]", "PASSWORD")
('OK', ['LOGIN completed.'])
>>> i.select("Calendar")
('OK', ['159'])
>>> i.fetch(159, "(RFC822)")
('OK', [None])
>>> i.fetch(159, "(RFC822)")

La segunda vez que llamo a fetch, devuelve un mensaje: "El servidor no pudo recuperar el siguiente mensaje. El mensaje no se ha eliminado. Puede verlo con Outlook o Outlook Web App. También puede contactar el remitente para averiguar lo que dice el mensaje ".

En WebMail, veo que la carpeta Calendario (accesible a través de la pestaña Calendario) tiene permisos para visibilidad fuera de la organización . Actualmente está configurado en "No compartido". Otras opciones son "Solo disponibilidad", "Detalles limitados" o "Detalles completos". Establecer los permisos en "Detalles completos" y luego enviarme una invitación a la reunión no tuvo ningún efecto en el formato de la invitación a la reunión.

Como solución para no recibir el mensaje iCalendar, tengo Thunderbird abierto con el complemento Lightning. De alguna manera, el complemento Lightning sabe cómo recibir invitaciones a reuniones. Los mensajes aún aparecen como texto / html, pero hay un enlace en la barra de estado de Thunderbird. Al hacer clic, se abre un mensaje que le pregunta si rechaza o acepta la invitación.

¿Alguien tiene alguna idea de por qué las invitaciones a reuniones de Outlook 365 llegan como simples mensajes de texto / html en lugar de mensajes iCalendar? ¿Hay algo que pueda hacer? Si el complemento Lightning puede funcionar con las invitaciones, entonces debe haber una solución, como usar los Servicios web de Microsoft Exchange (EWS). Si la solución requiere que codifique una herramienta, que así sea. Un empujón en la dirección correcta sería muy apreciado.

user3295332
fuente
Este enlace puede ser útil: blogs.technet.com/b/timmcmic/archive/2013/11/10/…
SEoF
1
@SEoF Convertí tu respuesta a un comentario que proporciona el enlace al que te referías. Como el resultado de su respuesta explicaba lo que no funcionó para usted, lo eliminé. Solo publique respuestas que realmente expliquen cómo resolver un problema, los enlaces a recursos externos no se consideran respuestas.
terdon
github.com/eikenb/ihol
John Eikenberry

Respuestas:

3

Puede configurarlo para que Office 365 / Outlook envíe invitaciones formateadas en formato iCalendar a través de la interfaz web.

  1. Inicie sesión en su cuenta de Office 365
  2. Aplicación de correo abierto (Outlook)
  3. Presiona el ícono de ajustes en la esquina superior derecha (configuración)
  4. En el cuadro de búsqueda, escriba "imap"
  5. Seleccione "Pop e IMAP"
  6. En la parte inferior, seleccione "Enviar invitaciones a eventos en formato iCalendar" para POP y / o IMAP.
  7. Presiona "Guardar"

Ahora debería recibir todas las invitaciones en el formato iCalendar.

John Eikenberry
fuente
Me cansé de tratar de trabajar con archivos adjuntos de correo electrónico para escribir mi propio calendario de Outlook para recordar el programa de exportación. Llama a la API de Office-365 directamente y puede generar varias cosas, como recordar entradas formateadas. Lo nombré ihol (Odio mirar). Github.com/eikenb/ihol
John Eikenberry
1

El enlace que SEoF proporcionó fue una gran sugerencia. La publicación del blog está incompleta, en mi opinión, pero me ayudó a comenzar por el camino correcto. Investigué un poco más y obtuve una lista completa de pasos para que Office 365 me enviara invitaciones a reuniones en formato iCalendar (.ics).

Tenga en cuenta que no soy administrador y que no necesitaba contactar a nadie para otorgarme ningún privilegio. La única advertencia es que necesita acceso a un cuadro de Windows. Una vez que cambie la configuración a través de Windows, puede volver a utilizar el sistema operativo que estaba utilizando antes. Hice lo siguiente por mi cuenta como usuario normal con Windows 7:

  1. Descargue e instale Microsoft .NET Framework 4.5 desde http://www.microsoft.com/en-us/download/details.aspx?id=30653 .
  2. Descargue e instale Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) desde http://www.microsoft.com/en-us/download/details.aspx?id=40855 .
  3. Ejecute PowerShell como administrador.
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $ UserCredential = Get-Credential
    • Introduzca su dirección de correo electrónico y contraseña.
  6. $ Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ UserCredential -Authentication Basic -AllowRedirection
  7. $ ImportResults = Import-PSSession $ Session
  8. Get-CASMailbox -identity [email protected] | Lista de formato
  9. Set-CASMailbox -identity [email protected] -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption: $ TRUE
  10. Remove-PSSession $ Session
  11. Set-ExecutionPolicy -ExecutionPolicy Restricted

Ahora, mi mutt en Linux está recuperando invitaciones a reuniones en formato iCalendar (.ics).

user3295332
fuente
Esto funcionó perfectamente. Gracias por las instrucciones detalladas.
Jason Day
0

No es exactamente lo que solicitó OP, pero si se permite la lógica de terceros, entonces compruebe el exchangelib fantástico (python). Ejemplo rápido de py3 de recuperación de eventos para los próximos 3 meses (tenga en cuenta que los elementos recurrentes se han extendido):

import arrow  # not required, but highly recommended lib for time processing
import base64
from tzlocal import get_localzone
from subprocess import call

from exchangelib import DELEGATE, Account, Credentials, EWSDateTime

CREDENTIALS = Credentials(username='[email protected]', password='topsecret')
ACCOUNT = Account(primary_smtp_address='[email protected]', credentials=CREDENTIALS,
                autodiscover=True, access_type=DELEGATE)

def sanitize(p):
    '''some .ical files didn't have proper end:vcalendar closure'''
    end = 'END:VCALENDAR\n'
    s = base64.b64decode(p).decode().replace("\r\n", "\n")
    if not s.endswith(end):
        s += end

    return s

tz = get_localzone()
now = arrow.now()
upper_limit = now.replace(months=+3)
items = ACCOUNT.calendar.view(
    start=tz.localize(EWSDateTime(now.year, now.month, now.day)),
    end=tz.localize(EWSDateTime(upper_limit.year, upper_limit.month, upper_limit.day)),
)

cals = []  # list of .ical files' contents
for item in items:
    cals.append(sanitize(item.mime_content))
laur
fuente
Otra buena biblioteca es github.com/Narcolapser/python-o365
John Eikenberry