Come ricevere gli inviti alle riunioni da Office365, in modo che possano essere analizzati e aggiunti a un calendario?


10

Come ricevere gli inviti alle riunioni iCalendar (.ics o .ical) da outlook.office365.com, in modo che possano essere analizzati e aggiunti a un calendario (come remind + wyrd)?

Ho cercato a lungo e duramente una risposta, ma non ne ho trovata nessuna, quindi mi chiedo se mi sto perdendo qualcosa di veramente banale.

Sto usando Mutt 1.5.22 con OfflineIMAP 6.5.5 su Fedora 20 (Heisenbug).

Esistono molti script per analizzare i messaggi iCalendar in formati che possono essere importati in calendari. Questo non è un mio problema Il mio problema è che non sto nemmeno ricevendo messaggi iCalendar, quindi non ho nulla da analizzare.

Un invito alla riunione arriva nella mia casella di posta come messaggio di testo / html codificato in base64. E ' non è un messaggio in più e non ci sono nessun allegato . Il corpo del messaggio contiene un collegamento a Microsoft Outlook Web Access (OWA). Seguire il collegamento non sembra fare altro che portarmi su WebMail. Il resto del corpo dell'email contiene la descrizione dell'invito alla riunione.

Ho provato a inoltrare l'invito e inoltrare l'invito come allegato, ma nessuno di questi ha influito sul formato del messaggio.

Ho ispezionato le intestazioni del messaggio, ma nulla si è rivelato importante. Li ho copiati qui, nel caso in cui significassero qualcosa per chiunque:

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

Ho anche ispezionato le intestazioni del messaggio in WebMail. C'erano più intestazioni (alcune relative a tnef), ma ancora una volta, nulla sembrava correlato a calendari o inviti.

Ho confrontato le intestazioni di un "invito alla riunione" con le intestazioni di una normale e-mail. L'unica differenza era che un'e-mail normale contiene un'intestazione aggiuntiva: "Soppressione risposta automatica X: DR, RN, NRN, OOF, Risposta automatica".

Il mio filtro di cartella .offlineimaprc è impostato per non sincronizzare la cartella Calendario. Questo perché ogni volta che OfflineIMAP ha tentato di sincronizzarsi, durante la sincronizzazione della cartella Calendario si verificherebbero più di cento istanze dello stesso errore: "ERRORE: il server IMAP 'remoto' non ha un messaggio con UID '[...]' ".

Utilizzo di imaplib di Python per ispezionare la cartella Calendario:

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

La seconda volta che chiamo fetch, viene restituito un messaggio: "Il server non è stato in grado di recuperare il seguente messaggio. Il messaggio non è stato eliminato. Potresti essere in grado di visualizzarlo utilizzando Outlook o Outlook Web App. Puoi anche contattare il mittente per scoprire cosa dice il messaggio ".

In WebMail, vedo che la cartella Calendario (accessibile tramite la scheda Calendario) dispone delle autorizzazioni per la visibilità all'esterno dell'organizzazione . Attualmente è impostato su "Non condiviso". Altre opzioni sono "Solo disponibilità", "Dettagli limitati" o "Dettagli completi". L'impostazione delle autorizzazioni su "Dettagli completi" e quindi l'invio di un invito a una riunione non hanno avuto alcun effetto sul formato dell'invito alla riunione.

Come soluzione alternativa per non ricevere il messaggio iCalendar, ho Thunderbird aperto con il componente aggiuntivo Lightning. In qualche modo, il componente aggiuntivo Lightning sa come ricevere gli inviti alle riunioni. I messaggi vengono comunque visualizzati come text / html, ma nella barra di stato di Thunderbird è presente un collegamento. Cliccandolo si apre un prompt che chiede se rifiutare o accettare l'invito.

Qualcuno ha qualche idea del perché gli inviti alle riunioni da Outlook 365 arrivano come semplici messaggi di testo / html anziché come messaggi iCalendar? C'è qualcosa che posso fare? Se il componente aggiuntivo Lightning può funzionare con gli inviti, è necessario che vi sia una soluzione, ad esempio l'utilizzo dei servizi Web di Microsoft Exchange (EWS). Se la soluzione mi richiederà di codificare uno strumento, così sia. Una spinta nella giusta direzione sarebbe molto apprezzata.


Questo link potrebbe essere utile: blogs.technet.com/b/timmcmic/archive/2013/11/10/…
SEoF

1
@SEoF Ho convertito la tua risposta in un commento fornendo il link a cui ti riferivi. Poiché la res della tua risposta stava spiegando cosa non funzionava per te, l'ho cancellata. Pubblica solo risposte che spiegano effettivamente come risolvere un problema, i collegamenti a risorse esterne non sono considerati risposte.
terdon

Risposte:


3

Puoi impostarlo in modo che Office 365 / Outlook invii gli inviti formattati in formato iCalendar tramite l'interfaccia web.

  1. Accedi al tuo account Office 365
  2. Apri l'app di posta (Outlook)
  3. Premi l'icona a forma di ingranaggio nell'angolo in alto a destra (impostazioni)
  4. Nella casella di ricerca digitare "imap"
  5. Seleziona "Pop e IMAP"
  6. In basso seleziona "Invia inviti a eventi in formato iCalendar" per POP e / o IMAP.
  7. Premi "Salva"

Ora dovresti ricevere tutti gli inviti nel formato iCalendar.


Mi sono stancato di provare a lavorare con gli allegati e-mail per scrivere il mio calendario di Outlook per ricordare il programma di esportazione. Chiama direttamente l'API di Office-365 e può produrre varie cose tra cui ricordare voci formattate. Named it ihol (I Hate OutLook) .. github.com/eikenb/ihol
John Eikenberry

1

Il collegamento fornito da SEoF è stato un grande suggerimento. Il post sul blog è incompleto, secondo me, ma mi ha fatto iniziare sulla strada giusta. Ho fatto ancora un po 'di ricerche e ho trovato un elenco completo di passaggi per convincere Office 365 a inviarmi inviti alle riunioni in formato iCalendar (.ics).

Nota che non sono un amministratore e non ho avuto bisogno di contattare nessuno per darmi alcun privilegio. L'unica avvertenza è che è necessario accedere a una finestra di Windows. Dopo aver modificato le impostazioni tramite Windows, è possibile tornare a utilizzare qualsiasi sistema operativo utilizzato in precedenza. Ho fatto quanto segue da solo come utente normale usando Windows 7:

  1. Scarica e installa Microsoft .NET Framework 4.5 da http://www.microsoft.com/en-us/download/details.aspx?id=30653 .
  2. Scarica e installa Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) da http://www.microsoft.com/en-us/download/details.aspx?id=40855 .
  3. Esegui PowerShell come amministratore.
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $ UserCredential = Get-Credential
    • Inserisci il tuo indirizzo email e la password.
  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 YOUR@EMAIL.ADDRESS | Format-List
  9. Set-CASMailbox -identity YOUR@EMAIL.ADDRESS -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption: TRUE
  10. Remove-PSSession $ Session
  11. Set-ExecutionPolicy -ExecutionPolicy Limitato

Ora, il mio mutt su Linux sta recuperando gli inviti alle riunioni in formato iCalendar (.ics).


Questo ha funzionato perfettamente. Grazie per le istruzioni dettagliate.
Jason Day,

0

Non esattamente quello che ha chiesto OP, ma se è consentita la logica di terze parti, dai un'occhiata a fantastic exchangelib (python). Esempio rapido di py3 di recupero di eventi per i prossimi 3 mesi (notare che gli elementi ricorrenti sono stati estesi):

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='mymail@company.com', password='topsecret')
ACCOUNT = Account(primary_smtp_address='mymail@company.com', 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))

Un'altra buona biblioteca è github.com/Narcolapser/python-o365
John Eikenberry
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.