Wie erhalte ich Besprechungseinladungen von Office365, damit sie analysiert und einem Kalender hinzugefügt werden können?

10

Wie erhalte ich Einladungen zu iCalendar-Besprechungen (.ics oder .ical) von Outlook.office365.com, damit sie analysiert und einem Kalender hinzugefügt werden können (z. B. erinnern + wyrd)?

Ich habe lange und intensiv nach einer Antwort gesucht, aber keine gefunden. Ich frage mich, ob mir nur etwas wirklich Triviales fehlt.

Ich verwende Mutt 1.5.22 mit OfflineIMAP 6.5.5 unter Fedora 20 (Heisenbug).

Es gibt viele Skripte zum Parsen von iCalendar-Nachrichten in Formate, die in Kalender importiert werden können. Das ist nicht mein Problem. Mein Problem ist, dass ich nicht einmal iCalendar-Nachrichten erhalte, sodass ich nichts zu analysieren habe.

Eine Besprechungseinladung kommt als base64-codierte Text- / HTML-Nachricht in meinem Posteingang an. Es ist keine mehrteilige Nachricht und es gibt keine Anhänge . Der Nachrichtentext enthält einen Link zu Microsoft Outlook Web Access (OWA). Das Folgen des Links scheint nichts anderes zu tun, als mich zu WebMail zu bringen. Der Rest des E-Mail-Textes enthält die Beschreibung der Besprechungseinladung.

Ich habe versucht, die Einladung weiterzuleiten und die Einladung als Anhang weiterzuleiten, aber keines davon hat das Format der Nachricht beeinflusst.

Ich habe die Überschriften der Nachricht überprüft, aber nichts war wichtig. Ich habe sie hier kopiert, falls sie jemandem etwas bedeuten:

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

Ich habe auch die Header der Nachricht in WebMail überprüft. Es gab mehr Überschriften (einige bezogen sich auf tnef), aber auch hier schien nichts mit Kalendern oder Einladungen zu tun zu haben.

Ich habe die Überschriften einer "Besprechungseinladung" mit den Überschriften einer normalen E-Mail verglichen. Der einzige Unterschied bestand darin, dass eine normale E-Mail einen zusätzlichen Header enthält: "X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply".

Der Ordnerfilter von .offlineimaprc ist so eingestellt, dass der Kalenderordner nicht synchronisiert wird. Dies liegt daran, dass jedes Mal, wenn OfflineIMAP versucht hat, eine Synchronisierung durchzuführen, beim Synchronisieren des Kalenderordners mehr als hundert Instanzen desselben Fehlers auftreten: "FEHLER: IMAP-Server 'remote' hat keine Nachricht mit der UID '[...]' . "

Verwenden von Pythons imaplib zum Überprüfen des Kalenderordners:

>>> 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)")

Wenn ich zum zweiten Mal fetch aufrufe, wird eine Nachricht zurückgegeben: "Der Server konnte die folgende Nachricht nicht abrufen. Die Nachricht wurde nicht gelöscht. Möglicherweise können Sie sie entweder mit Outlook oder Outlook Web App anzeigen. Sie können auch Kontakt aufnehmen der Absender, um herauszufinden, was die Nachricht sagt. "

In WebMail sehe ich, dass der Kalenderordner (über die Registerkarte Kalender zugänglich) über Berechtigungen für die Sichtbarkeit außerhalb der Organisation verfügt . Es ist derzeit auf "Nicht freigegeben" eingestellt. Andere Optionen sind "Nur Verfügbarkeit", "Eingeschränkte Details" oder "Vollständige Details". Das Festlegen der Berechtigungen auf "Vollständige Details" und das anschließende Senden einer Besprechungseinladung an mich selbst hatte keine Auswirkungen auf das Format der Besprechungseinladung.

Um dieses Problem zu umgehen, wenn keine iCalendar-Nachricht empfangen wird, ist Thunderbird mit dem Lightning-Add-On geöffnet. Irgendwie weiß das Lightning-Add-On, wie man Besprechungseinladungen empfängt. Die Nachrichten werden weiterhin als Text / HTML angezeigt, aber in der Statusleiste von Thunderbird befindet sich ein Link. Wenn Sie darauf klicken, werden Sie gefragt, ob Sie die Einladung ablehnen oder annehmen möchten.

Hat jemand eine Idee, warum Besprechungseinladungen aus Outlook 365 als einfache Text- / HTML-Nachrichten und nicht als iCalendar-Nachrichten ankommen? Kann ich irgendetwas tun? Wenn das Lightning-Add-On mit den Einladungen arbeiten kann, muss es eine Lösung geben, z. B. die Verwendung von Microsoft Exchange Web Services (EWS). Wenn ich für die Lösung ein Tool codieren muss, soll es so sein. Ein Vorstoß in die richtige Richtung wäre sehr dankbar.

user3295332
quelle
Dieser Link könnte hilfreich sein: blogs.technet.com/b/timmcmic/archive/2013/11/10/…
SEoF
1
@SEoF Ich habe Ihre Antwort in einen Kommentar umgewandelt, der den Link enthält, auf den Sie sich bezogen haben. Da die Res Ihrer Antwort erklärte, was für Sie nicht funktioniert hat, habe ich es gelöscht. Bitte posten Sie nur Antworten, die tatsächlich erklären, wie ein Problem gelöst werden kann. Links zu externen Ressourcen gelten nicht als Antworten.
Terdon
github.com/eikenb/ihol
John Eikenberry

Antworten:

3

Sie können festlegen, dass Office 365 / Outlook Einladungen im iCalendar-Format über die Weboberfläche sendet.

  1. Melden Sie sich bei Ihrem Office 365-Konto an
  2. Mail-App öffnen (Outlook)
  3. Drücke das Zahnradsymbol in der oberen rechten Ecke (Einstellungen)
  4. Geben Sie im Suchfeld "imap" ein
  5. Wählen Sie "Pop and IMAP"
  6. Wählen Sie unten "Ereigniseinladungen im iCalendar-Format senden" für POP und / oder IMAP.
  7. Klicken Sie auf "Speichern"

Sie sollten jetzt alle Einladungen im iCalendar-Format erhalten.

John Eikenberry
quelle
Ich hatte es satt, mit E-Mail-Anhängen zu arbeiten, um meinen eigenen Outlook-Kalender zu schreiben und an das Exportprogramm zu erinnern. Es ruft die Office-365-API direkt auf und kann verschiedene Dinge ausgeben, einschließlich erinnerungsformatierter Einträge. Nannte es ihol (ich hasse OutLook) .. github.com/eikenb/ihol
John Eikenberry
1

Der von SEoF bereitgestellte Link war ein großartiger Vorschlag. Der Blog-Beitrag ist meiner Meinung nach unvollständig, hat mich aber auf den richtigen Weg gebracht. Ich habe noch ein bisschen gegraben und eine vollständige Liste der Schritte erstellt, mit denen Office 365 mir Besprechungseinladungen im iCalendar-Format (.ics) senden kann.

Beachten Sie, dass ich kein Administrator bin und niemanden kontaktieren musste, um mir Berechtigungen zu erteilen. Die einzige Einschränkung ist, dass Sie Zugriff auf eine Windows-Box benötigen. Sobald Sie die Einstellungen über Windows geändert haben, können Sie wieder das Betriebssystem verwenden, das Sie zuvor verwendet haben. Ich habe als normaler Benutzer unter Windows 7 Folgendes alleine gemacht:

  1. Laden Sie Microsoft .NET Framework 4.5 von http://www.microsoft.com/en-us/download/details.aspx?id=30653 herunter und installieren Sie es .
  2. Laden Sie Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) von http://www.microsoft.com/en-us/download/details.aspx?id=40855 herunter und installieren Sie es .
  3. Führen Sie PowerShell als Administrator aus.
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $ UserCredential = Get-Credential
    • Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein.
  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 -identität [email protected] | Format-Liste
  9. Set-CASMailbox -identity [email protected] -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption: $ TRUE
  10. Remove-PSSession $ Session
  11. Set-ExecutionPolicy -ExecutionPolicy Eingeschränkt

Jetzt ruft mein Köter unter Linux Besprechungseinladungen im iCalendar-Format (.ics) ab.

user3295332
quelle
Das hat perfekt funktioniert. Vielen Dank für die ausführliche Anleitung.
Jason Day
0

Nicht genau das, was OP gefragt hat, aber wenn Logik von Drittanbietern erlaubt ist, dann schauen Sie sich die fantastische Exchangeangelib (Python) an. Schnelles py3-Beispiel für das Abrufen von Ereignissen für die nächsten 3 Monate (beachten Sie, dass wiederkehrende Elemente erweitert wurden):

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
quelle
Eine andere gute Bibliothek ist github.com/Narcolapser/python-o365
John Eikenberry