Bagaimana cara menerima undangan rapat dari Office365, sehingga dapat diuraikan dan ditambahkan ke kalender?

10

Bagaimana cara menerima undangan rapat iCalendar (.ics atau .ical) dari outlook.office365.com, sehingga dapat diuraikan dan ditambahkan ke kalender (seperti mengingatkan + wyrd)?

Saya telah mencari jawaban yang panjang dan sulit, tetapi belum menemukan jawaban, jadi saya ingin tahu apakah saya melewatkan sesuatu yang sangat sepele.

Saya menggunakan Mutt 1.5.22 dengan OfflineIMAP 6.5.5 di Fedora 20 (Heisenbug).

Ada banyak skrip di luar sana untuk mem-parsing pesan iCalendar ke format yang dapat diimpor ke kalender. Ini bukan masalah saya. Masalah saya adalah bahwa saya bahkan tidak menerima pesan iCalendar, jadi saya tidak punya apa-apa untuk diuraikan.

Undangan rapat tiba di kotak masuk saya sebagai pesan teks / html yang disandikan base64. Ini bukan pesan multi bagian dan tidak ada lampiran . Isi pesan berisi tautan ke Microsoft Outlook Web Access (OWA). Mengikuti tautan tampaknya tidak melakukan apa-apa selain membawa saya ke WebMail. Sisa badan email berisi deskripsi undangan rapat.

Saya mencoba meneruskan undangan dan meneruskan undangan sebagai lampiran, tetapi tidak satu pun yang memengaruhi format pesan.

Saya memeriksa tajuk pesan, tetapi tidak ada yang penting. Saya sudah menyalinnya di sini, kalau-kalau ada artinya bagi siapa pun:

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

Saya juga memeriksa header pesan di WebMail. Ada lebih banyak tajuk (beberapa terkait dengan tnef), tetapi sekali lagi, tampaknya tidak ada yang terkait dengan kalender atau undangan.

Saya membandingkan tajuk "undangan rapat" dengan tajuk email biasa. Satu-satunya perbedaan adalah bahwa email normal berisi tajuk tambahan: "X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply".

Folderfilter .offlineimaprc saya diatur untuk tidak menyinkronkan folder Kalender. Ini karena setiap kali OfflineIMAP mencoba menyinkronkan, itu akan mengalami lebih dari seratus contoh kesalahan yang sama ketika menyinkronkan folder Kalender: "ERROR: Server IMAP 'remote' tidak memiliki pesan dengan UID '[...]' . "

Menggunakan imaplib Python untuk memeriksa folder Kalender:

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

Saat saya memanggil fetch yang kedua, ia akan mengirim pesan: "Server tidak dapat mengambil pesan berikut. Pesannya belum dihapus. Anda mungkin dapat melihatnya menggunakan Outlook atau Outlook Web App. Anda juga dapat menghubungi pengirim untuk mengetahui apa yang dikatakan pesan. "

Di WebMail, saya melihat bahwa folder Kalender (dapat diakses melalui tab Kalender) memiliki izin untuk visibilitas di luar organisasi . Saat ini diatur ke "Tidak dibagikan". Pilihan lain adalah "Hanya ketersediaan", "Rincian terbatas", atau "Rincian lengkap". Menetapkan izin untuk "Detail lengkap" dan kemudian mengirim undangan rapat ke saya sendiri tidak berpengaruh pada format undangan rapat.

Sebagai solusi untuk tidak menerima pesan iCalendar, saya telah membuka Thunderbird dengan add-on Lightning. Entah bagaimana, add-on Lightning tahu cara menerima undangan rapat. Pesan masih muncul sebagai teks / html, tetapi ada tautan di bilah status Thunderbird. Mengkliknya akan membuka prompt yang menanyakan apakah akan menolak atau menerima undangan.

Adakah yang tahu mengapa undangan rapat dari Outlook 365 datang sebagai pesan teks / html sederhana dan bukan pesan iCalendar? Apakah ada sesuatu yang saya bisa lakukan? Jika add-on Lightning dapat berfungsi dengan undangan, maka harus ada solusi, seperti menggunakan Microsoft Exchange Web Services (EWS). Jika solusinya akan meminta saya untuk membuat kode alat, biarlah. Dorongan ke arah yang benar akan sangat dihargai.

pengguna3295332
sumber
Tautan ini mungkin bermanfaat: blogs.technet.com/b/timmcmic/archive/2013/11/10/…
SEoF
1
@ SEoF Saya mengonversi jawaban Anda menjadi komentar yang memberikan tautan yang Anda maksud. Karena jawaban Anda menjelaskan apa yang tidak berhasil untuk Anda, saya menghapusnya. Harap hanya mengirim jawaban yang benar-benar menjelaskan cara mengatasi masalah, tautan ke sumber daya luar tidak dianggap sebagai jawaban.
terdon
github.com/eikenb/ihol
John Eikenberry

Jawaban:

3

Anda bisa mengaturnya sehingga Office 365 / Outlook mengirim undangan yang diformat dalam format iCalendar melalui antarmuka web.

  1. Masuk ke akun Office 365 Anda
  2. Buka Aplikasi Surat (Outlook)
  3. Tekan ikon roda gigi di sudut kanan atas (pengaturan)
  4. Di kotak pencarian ketik "imap"
  5. Pilih "Pop dan IMAP"
  6. Di bagian bawah pilih "Kirim undangan acara dalam format iCalendar" untuk POP dan / atau IMAP.
  7. Tekan "Simpan"

Anda sekarang harus mendapatkan semua undangan dalam format iCalendar.

John Eikenberry
sumber
Saya bosan mencoba bekerja dengan lampiran email untuk menulis kalender pandangan saya sendiri untuk mengingatkan program ekspor. Ini memanggil Office-365 API secara langsung dan dapat menampilkan berbagai hal termasuk mengingatkan entri yang diformat. Bernama ihol (I Hate OutLook) .. github.com/eikenb/ihol
John Eikenberry
1

Tautan yang disediakan SEoF adalah saran yang bagus. Posting blog tidak lengkap, menurut saya, tetapi itu membuat saya mulai di jalur yang benar. Saya melakukan lebih banyak penggalian dan menghasilkan daftar lengkap langkah-langkah untuk mendapatkan Office 365 untuk mengirimi saya undangan rapat dalam format iCalendar (.ics).

Perhatikan bahwa saya bukan administrator dan saya tidak perlu menghubungi siapa pun untuk memberi saya hak istimewa. Satu-satunya peringatan adalah bahwa Anda memerlukan akses ke kotak Windows. Setelah Anda mengubah pengaturan melalui Windows, Anda dapat kembali menggunakan OS apa pun yang Anda gunakan sebelumnya. Saya melakukan yang berikut ini sendiri sebagai pengguna normal menggunakan Windows 7:

  1. Unduh dan instal Microsoft .NET Framework 4.5 dari http://www.microsoft.com/en-us/download/details.aspx?id=30653 .
  2. Unduh dan instal Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) dari http://www.microsoft.com/en-us/download/details.aspx?id=40855 .
  3. Jalankan PowerShell sebagai administrator.
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $ UserCredential = Dapatkan-Credential
    • Masukkan alamat email dan kata sandi Anda.
  6. $ Sesi = Baru-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Kredensial $ UserCredential -Authentication Basic -AllowRedirection
  7. $ ImportResults = Impor-PSSession $ Session
  8. Dapatkan-CASMailbox -identity [email protected] | Format-Daftar
  9. Set-CASMailbox -identity [email protected] -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRu
  10. Remove-PSSession $ Session
  11. Set-ExecutionPolicy -ExecutionPolicy Terbatas

Sekarang, mutt saya di Linux sedang mengambil undangan rapat dalam format iCalendar (.ics).

pengguna3295332
sumber
Ini bekerja dengan sempurna. Terima kasih untuk petunjuknya.
Jason Day
0

Tidak persis apa yang diminta OP, tetapi jika logika pihak ke-3 diizinkan, maka periksa exchangeelib (python) yang fantastis. Contoh py3 cepat untuk mengambil acara selama 3 bulan ke depan (perhatikan bahwa item berulang telah diperpanjang):

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
sumber
Perpustakaan bagus lainnya adalah github.com/Narcolapser/python-o365
John Eikenberry