Як отримати запрошення на зустріч від Office365, щоб їх можна було проаналізувати та додати до календаря?


10

Як отримувати запрошення на зустріч iCalendar (.ics або .ical) від outlook.office365.com, щоб їх можна було розібрати і додати до календаря (наприклад, нагадування + wyrd)?

Я довго і наполегливо шукав відповідь, але не знайшов жодної, тому мені цікаво, чи просто я пропускаю щось справді тривіальне.

Я використовую Mutt 1.5.22 з OfflineIMAP 6.5.5 на Fedora 20 (Heisenbug).

Існує багато сценаріїв для розбору повідомлень iCalendar у формати, які можна імпортувати в календарі. Це не моя проблема. Моя проблема полягає в тому, що я навіть не отримую повідомлень iCalendar, тому мені немає чого розбирати.

Запрошення на зустріч надходить до моєї скриньки у вигляді закодованого тексту / html-повідомлення base64. Це не багаточастинне повідомлення і немає вкладених файлів . Основна частина повідомлення містить посилання на веб-доступ до Microsoft Outlook (OWA). Перехід за посиланням, схоже, не робить нічого, крім того, щоб перевезти мене до WebMail. Решта електронної пошти містить опис запрошення на зустріч.

Я намагався переслати запрошення та переслати запрошення як вкладення, але жодне з них не вплинуло на формат повідомлення.

Я оглянув заголовки повідомлення, але нічого не виділялось як важливе. Я скопіював їх сюди, якщо вони комусь щось значать:

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

Я також оглянув заголовки повідомлення в WebMail. Було більше заголовків (деякі пов'язані з tnef), але знову ж таки нічого не здавалося пов'язаним з календарями чи запрошеннями.

Я порівняв заголовки "запрошення на зустріч" із заголовками звичайної електронної пошти. Різниця полягала лише в тому, що звичайний електронний лист містить додатковий заголовок: "X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply".

У папці фільтра .offlineimaprc папка не синхронізується з папкою Календар. Це тому, що кожного разу, коли OfflineIMAP намагався синхронізувати, під час синхронізації папки календаря зіткнеться понад сто екземплярів однієї і тієї ж помилки: "ПОМИЛКА:" віддалений "сервер IMAP не містить повідомлення з UID '[...]' . "

Використання зображень Python для огляду папки Календар:

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

Другий раз, коли я закликаю отримати, він повертає повідомлення: "Сервер не міг отримати таке повідомлення. Повідомлення не було видалено. Ви можете переглянути його за допомогою Outlook або Outlook Web App. Ви також можете зв’язатися відправник, щоб дізнатися, що йдеться у повідомленні. "

У WebMail я бачу, що папка Календар (доступна через вкладку Календар) має дозволи для видимості поза організацією . Наразі встановлено значення "Не поділяється". Інші параметри - "Лише доступність", "Обмежена інформація" або "Повна інформація". Визначення дозволів на "Повна інформація" та потім надсилання запрошення на зустріч не вплинуло на формат запрошення на зустріч.

Як вирішення проблеми щодо отримання повідомлення iCalendar, я відкрив Thunderbird із додатком Lightning. Так чи інакше, додаток «Блискавка» знає, як отримувати запрошення на зустріч. Повідомлення все ще відображаються як текст / html, але в рядку стану Thunderbird є посилання. Натиснувши на нього, відкриється підказка із запитом відмовити чи прийняти запрошення.

У когось є ідеї, чому запрошення на зустріч із Outlook 365 надходять як прості текстові / html-повідомлення, а не повідомлення iCalendar? Чи можна щось зробити? Якщо надбудова Lightning може працювати з запрошеннями, тоді повинно бути рішення, наприклад використання веб-служб Microsoft Exchange (EWS). Якщо рішення вимагатиме від мене кодування інструменту, так і буде. Поштовх у правильному напрямку буде дуже вдячний.


Це посилання може бути корисним: blogs.technet.com/b/timmcmic/archive/2013/11/10/…
SEOF

1
@SEoF Я перетворив вашу відповідь у коментар, даючи посилання, на яке ви посилалися. Оскільки відповідь вашої відповіді пояснювала, що для вас не працює, я її видалив. Будь ласка, публікуйте лише відповіді, які фактично пояснюють, як вирішити проблему, посилання на зовнішні ресурси не вважаються відповідями.
terdon

Відповіді:


3

Ви можете встановити його так, що Office 365 / Outlook надсилає запрошення, відформатовані у форматі iCalendar через веб-інтерфейс.

  1. Увійдіть до свого облікового запису Office 365
  2. Відкрити програму пошти (Outlook)
  3. Натисніть на значок шестірні у верхньому правому куті (налаштування)
  4. У полі пошуку введіть "imap"
  5. Виберіть "Поп та IMAP"
  6. Внизу виберіть "Надіслати запрошення на подію у форматі iCalendar" для POP та / або IMAP.
  7. Натисніть "Зберегти"

Тепер вам слід отримати всі запрошення у форматі iCalendar.


Я втомився намагатися працювати з вкладеннями електронної пошти, щоб написати власний календар прогнозу, щоб нагадати програму експорту. Він закликає API Office-365 безпосередньо і може виводити різні речі, включаючи нагадування відформатованих записів. Назвав його ihol (I Hate OutLook) .. github.com/eikenb/ihol
Джон Ейкенберрі

1

Посилання, яке надав SEoF, було чудовою пропозицією. Повідомлення в блозі, на мій погляд, є неповним, але воно мене привело в потрібне русло. Я ще трохи копав і придумав повний перелік кроків для отримання Office 365 для надсилання мені запрошень на зустріч у форматі iCalendar (.ics).

Зауважте, що я не адміністратор, і мені не потрібно було зв’язуватися ні з ким, щоб надати мені пільги. Єдине застереження - вам потрібен доступ до вікна Windows. Після зміни параметрів через Windows, ви можете повернутися до використання будь-якої ОС, якою раніше користувалися. Я робив такі дії самостійно, як звичайний користувач, використовуючи Windows 7:

  1. Завантажте та встановіть Microsoft .NET Framework 4.5 з http://www.microsoft.com/en-us/download/details.aspx?id=30653 .
  2. Завантажте та встановіть Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) з http://www.microsoft.com/en-us/download/details.aspx?id=40855 .
  3. Запустіть PowerShell як адміністратор.
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $ UserCredential = Обліковий запис
    • Введіть свою електронну адресу та пароль.
  6. $ Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ UserCredences -Authentication Basic -AllowRedirection
  7. $ ImportResults = Імпорт-PSSession $ Сесія
  8. Get-CASMailbox - особистість YOUR@EMAIL.ADDRESS | Формат-список
  9. Set-CASMailbox -identity YOUR@EMAIL.ADDRESS -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption
  10. Видалити-PSSession $ Сесія
  11. Set-ExecutionPolicy -ExecutionPolicy Restricted

Тепер мій дзвінок в Linux - це отримання запрошень на зустрічі у форматі iCalendar (.ics).


Це спрацювало чудово. Дякую за детальну інструкцію.
День Джейсона

0

Не точно те, що запитував ОП, але якщо дозволена сторона логіки, то перевірте фантастичний exchangelib (python). Швидкий py3 приклад отримання подій протягом наступних 3 місяців (зауважте, що повторювані елементи були продовжені):

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

Ще одна гарна бібліотека - github.com/Narcolapser/python-o365
Джон Ейкенберрі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.