Jak odbierać zaproszenia na spotkania z Office365, aby można je było analizować i dodawać do kalendarza?


10

Jak odbierać zaproszenia na spotkania w programie iCalendar (.ics lub .ical) z witryny outlook.office365.com, aby można je było przeanalizować i dodać do kalendarza (np. Przypomnienie + wyrd)?

Długo i ciężko szukałem odpowiedzi, ale nie znalazłem żadnej, więc zastanawiam się, czy brakuje mi czegoś naprawdę trywialnego.

Używam Mutt 1.5.22 z OfflineIMAP 6.5.5 na Fedorze 20 (Heisenbug).

Istnieje wiele skryptów do parsowania wiadomości iCalendar w formatach, które można importować do kalendarzy. To nie jest mój problem. Mój problem polega na tym, że nawet nie otrzymuję wiadomości iCalendar, więc nie mam nic do przeanalizowania.

Zaproszenie na spotkanie pojawia się w mojej skrzynce odbiorczej jako wiadomość tekstowa / HTML w formacie base64. To nie jest wiadomość wieloczęściowa i nie ma żadnych załączników . Treść wiadomości zawiera łącze do programu Microsoft Outlook Web Access (OWA). Podążanie za linkiem wydaje się nie robić nic poza zabraniem mnie do WebMaila. Pozostała część wiadomości e-mail zawiera opis zaproszenia na spotkanie.

Próbowałem przekazać zaproszenie i przekazać zaproszenie jako załącznik, ale żaden z nich nie wpłynął na format wiadomości.

Przejrzałem nagłówki wiadomości, ale nic nie wyróżniało się jako ważne. Skopiowałem je tutaj, na wypadek, gdyby ktoś coś dla nich znaczył:

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

Sprawdziłem również nagłówki wiadomości w WebMail. Było więcej nagłówków (niektóre związane z tnef), ale znowu nic nie wydawało się związane z kalendarzami lub zaproszeniami.

Porównałem nagłówki „zaproszenia na spotkanie” z nagłówkami zwykłego e-maila. Jedyną różnicą było to, że zwykły e-mail zawiera dodatkowy nagłówek: „X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply”.

Mój folder .offlineimaprc jest ustawiony tak, aby nie synchronizować folderu Kalendarz. Dzieje się tak, ponieważ za każdym razem, gdy OfflineIMAP próbuje synchronizować, napotyka na ponad sto przypadków tego samego błędu podczas synchronizacji folderu Kalendarza: „BŁĄD:„ Zdalny ”serwer IMAP nie ma komunikatu o UID„ [...] ” . ”

Korzystanie z imaplib Pythona do sprawdzania folderu Kalendarz:

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

Przy drugim wywołaniu funkcji pobierania zwraca komunikat: „Serwer nie mógł pobrać następującej wiadomości. Wiadomość nie została usunięta. Możesz ją wyświetlić za pomocą aplikacji Outlook lub Outlook Web App. Możesz również skontaktować się z nadawcy, aby dowiedzieć się, co mówi wiadomość ”.

W WebMail widzę, że folder Kalendarz (dostępny na karcie Kalendarz) ma uprawnienia do widoczności poza organizacją . Obecnie jest ustawiony na „Nieudostępniony”. Inne opcje to „Tylko dostępność”, „Ograniczone szczegóły” lub „Pełne szczegóły”. Ustawienie uprawnień na „Pełne szczegóły”, a następnie wysłanie do siebie zaproszenia na spotkanie nie miało żadnego wpływu na format zaproszenia na spotkanie.

Aby obejść problem z nie otrzymywaniem wiadomości iCalendar, mam Thunderbirda otwarty z dodatkiem Lightning. W jakiś sposób dodatek Lightning wie, jak odbierać zaproszenia na spotkania. Wiadomości nadal są wyświetlane jako tekst / HTML, ale na pasku stanu Thunderbirda znajduje się link. Kliknięcie tego przycisku powoduje wyświetlenie monitu o odrzucenie lub zaakceptowanie zaproszenia.

Czy ktoś ma jakieś pomysły, dlaczego zaproszenia na spotkania z programu Outlook 365 przybywają jako zwykłe wiadomości tekstowe / HTML zamiast wiadomości iCalendar? Czy jest coś, co mogę zrobić? Jeśli dodatek Lightning może współpracować z zaproszeniami, musi istnieć rozwiązanie, takie jak korzystanie z usług Microsoft Exchange Web Services (EWS). Jeśli rozwiązanie będzie wymagać ode mnie zaprogramowania narzędzia, niech tak będzie. Popchnięcie we właściwym kierunku byłoby bardzo mile widziane.



1
@SEoF Przekształciłem twoją odpowiedź w komentarz podając link, o którym mówiłeś. Ponieważ w odpowiedzi twojej odpowiedzi było wyjaśnienie, co nie zadziałało, usunąłem ją. Proszę zamieszczać tylko odpowiedzi, które faktycznie wyjaśniają sposób rozwiązania problemu, linki do zasobów zewnętrznych nie są uważane za odpowiedzi.
terdon

Odpowiedzi:


3

Możesz to ustawić tak, aby Office 365 / Outlook wysyłał zaproszenia sformatowane w formacie iCalendar za pośrednictwem interfejsu internetowego.

  1. Zaloguj się do swojego konta Office 365
  2. Otwórz aplikację pocztową (Outlook)
  3. Kliknij ikonę koła zębatego w prawym górnym rogu (ustawienia)
  4. W polu wyszukiwania wpisz „imap”
  5. Wybierz „Pop i IMAP”
  6. Na dole wybierz „Wyślij zaproszenia na wydarzenia w formacie iCalendar” dla POP i / lub IMAP.
  7. Kliknij „Zapisz”

Powinieneś teraz otrzymać wszystkie zaproszenia w formacie iCalendar.


Zmęczyło mnie próbowanie pracy z załącznikami e-mail w celu napisania własnego kalendarza programu Outlook w celu przypomnienia o programie eksportującym. Wywołuje bezpośrednio interfejs API Office-365 i może wysyłać różne rzeczy, w tym przypominać sformatowane wpisy. Nazwał to ihol (I Hate OutLook) .. github.com/eikenb/ihol
John Eikenberry

1

Link podany przez SEoF był świetną sugestią. Moim zdaniem post na blogu jest niekompletny, ale pomógł mi rozpocząć właściwą drogę. Zrobiłem trochę więcej kopania i wymyśliłem pełną listę kroków, aby Office 365 wysłał mi zaproszenia na spotkania w formacie iCalendar (.ics).

Pamiętaj, że nie jestem administratorem i nie musiałem się z nikim kontaktować, aby dać mi jakiekolwiek uprawnienia. Jedynym zastrzeżeniem jest to, że potrzebujesz dostępu do okna systemu Windows. Po zmianie ustawień za pomocą systemu Windows możesz wrócić do korzystania z systemu operacyjnego, z którego korzystałeś wcześniej. Wykonałem następujące czynności jako zwykły użytkownik systemu Windows 7:

  1. Pobierz i zainstaluj Microsoft .NET Framework 4.5 ze strony http://www.microsoft.com/en-us/download/details.aspx?id=30653 .
  2. Pobierz i zainstaluj Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) ze strony http://www.microsoft.com/en-us/download/details.aspx?id=40855 .
  3. Uruchom PowerShell jako administrator.
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $ UserCredential = Get-Credential
    • Wpisz swój adres e-mail i hasło.
  6. $ Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ UserCredential -Authentication Basic -AllowRedirection
  7. $ ImportResults = Import-PSSession $ Sesja
  8. Uzyskaj-CASMailbox -identity YOUR@EMAIL.ADDRESS | Lista formatów
  9. Set-CASMailbox -identity YOUR@EMAIL.ADDRESS -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption: $ TRUE
  10. Usuń sesję PSSession $
  11. Set-ExecutionPolicy -ExecutionPolicy Ograniczone

Teraz mój kundel w systemie Linux pobiera zaproszenia na spotkania w formacie iCalendar (.ics).


To działało idealnie. Dziękuję za szczegółowe instrukcje.
Jason Day

0

Nie do końca to, o co prosi OP, ale jeśli dozwolona jest logika innej firmy, to sprawdź fantastyczny exchangeangelibib (python). Szybki przykład pobierania zdarzeń przez py3 na następne 3 miesiące (zauważ, że powtarzające się elementy zostały przedłużone):

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

Inną dobrą biblioteką jest github.com/Narcolapser/python-o365
John Eikenberry
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.