Mutt

如何接收來自 Office365 的會議邀請,以便解析並添加到日曆中?

  • April 11, 2017

如何接收來自outlook.office365.com 的iCalendar(.ics 或.ical)會議邀請,以便解析並添加到日曆中(如提醒+wyrd)?

我一直在努力尋找答案,但沒有找到任何答案,所以我想知道我是否只是錯過了一些非常微不足道的東西。

我在 Fedora 20 (Heisenbug) 上使用 Mutt 1.5.22 和 OfflineIMAP 6.5.5。

有許多腳本可用於將 iCalendar 消息解析為可導入日曆的格式。這不是我的問題。我的問題是我什至沒有收到 iCalendar 消息,所以我沒有什麼要解析的。

會議邀請以 base64 編碼文本/html 消息的形式到達我的收件箱。它不是多部分消息,也沒有附件。郵件正文包含指向 Microsoft Outlook Web Access (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 的 imaplib 檢查日曆文件夾:

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

我第二次呼叫 fetch 時,它返回一條消息:“伺服器無法檢索以下消息。該消息尚未被刪除。您可以使用 Outlook 或 Outlook Web App 查看它。您也可以聯繫發件人以了解郵件內容。”

在 WebMail 中,我看到日曆文件夾(可通過日曆選項卡訪問)具有在組織外部可見的權限。它目前設置為“不共享”。其他選項是“僅可用性”、“有限詳細資訊”或“完整詳細資訊”。將權限設置為“完整詳細資訊”然後向自己發送會議邀請對會議邀請的格式沒有任何影響。

作為不接收 iCalendar 消息的解決方法,我使用 Lightning 外掛打開了 Thunderbird。不知何故,Lightning 外掛知道如何接收會議邀請。消息仍然顯示為 text/html,但 Thunderbird 的狀態欄中有一個連結。點擊它會打開一個提示,詢問是拒絕還是接受邀請。

任何人都知道為什麼來自 Outlook 365 的會議邀請以簡單的文本/html 消息而不是 iCalendar 消息的形式到達?有什麼我可以做的嗎?如果 Lightning 外掛可以處理邀請,則必須有解決方案,例如使用 Microsoft Exchange Web 服務 (EWS)。如果解決方案需要我編寫一個工具,那就這樣吧。朝著正確的方向推動將不勝感激。

SEoF 提供的連結是一個很好的建議。在我看來,這篇博文並不完整,但它確實讓我走上了正確的道路。我進行了更多探勘,並提出了讓 Office 365 以 iCalendar (.ics) 格式向我發送會議邀請的完整步驟列表。

請注意,我不是管理員,我不需要聯繫任何人來授予我任何權限。唯一需要注意的是,您需要訪問 Windows 框。通過 Windows 更改設置後,您可以返回使用之前使用的任何作業系統。作為使用 Windows 7 的普通使用者,我自己執行了以下操作:

  1. 從http://www.microsoft.com/en-us/download/details.aspx?id=30653下載並安裝 Microsoft .NET Framework 4.5 。
  2. 從http://www.microsoft.com/en-us/download/details.aspx?id=40855下載並安裝 Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) 。
  3. 以管理員身份執行 PowerShell。
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $UserCredential = 獲取憑據
  • 輸入您的電子郵件地址和密碼。
  1. $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
  2. $ ImportResults = Import-PSSession $ 會議
  3. Get-CASMailbox -identity YOUR@EMAIL.ADDRESS | 格式列表
  4. Set-CASMailbox -identity YOUR@EMAIL.ADDRESS -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption: $ 真的
  5. 刪除-PSSession $Session
  6. Set-ExecutionPolicy -ExecutionPolicy Restricted

現在,我在 Linux 上的 mutt 正在檢索 iCalendar (.ics) 格式的會議邀請。

引用自:https://unix.stackexchange.com/questions/122329