如何接收来自Office365的会议邀请,以便对其进行解析并添加到日历中?

use*_*332 11 mutt

如何从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
Run Code Online (Sandbox Code Playgroud)

我还检查了 WebMail 中邮件的标题。有更多的标题(一些与 tnef 相关),但同样,似乎与日历或邀请无关。

我将“会议邀请”的标题与普通电子邮件的标题进行了比较。唯一的区别是普通电子邮件包含一个额外的标题:“X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply”。

我的 .offlineimaprc 的文件夹过滤器设置为不同步日历文件夹。这是因为每次 OfflineIMAP 尝试同步时,在同步日历文件夹时都会遇到一百多个相同错误的实例:“错误:IMAP 服务器‘远程’没有带有 UID‘[...]’的消息” .”

使用 Python 的 imaplib 检查 Calendar 文件夹:

>>> 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)")
Run Code Online (Sandbox Code Playgroud)

我第二次调用 fetch 时,它返回一条消息:“服务器无法检索以下消息。该消息尚未删除。您可以使用 Outlook 或 Outlook Web App 查看它。您也可以联系发件人找出消息内容。”

在 WebMail 中,我看到 Calendar 文件夹(可通过 Calendar 选项卡访问)具有在组织外可见性的权限。它当前设置为“未共享”。其他选项是“仅限可用性”、“有限的详细信息”或“完整的详细信息”。将权限设置为“完整详细信息”然后向自己发送会议邀请对会议邀请的格式没有任何影响。

作为未收到 iCalendar 消息的解决方法,我使用 Lightning 插件打开了 Thunderbird。不知何故,Lightning 插件知道如何接收会议邀请。消息仍然显示为 text/html,但在 Thunderbird 的状态栏中有一个链接。单击它会打开一个提示,询问是拒绝还是接受邀请。

任何人都知道为什么来自 Outlook 365 的会议邀请以简单的文本/html 消息而不是 iCalendar 消息的形式到达?有什么我可以做的吗?如果 Lightning 插件可以处理邀请,则必须有解决方案,例如使用 Microsoft Exchange Web Services (EWS)。如果解决方案需要我编写一个工具,那就这样吧。朝着正确方向的推动将不胜感激。

use*_*332 3

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. 设置-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $UserCredential = 获取凭证
    • 输入您的电子邮件地址和密码。
  6. $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
  7. $ImportResults = 导入-PSSession $Session
  8. 获取-CASMailbox -identity 您的@EMAIL.ADDRESS | 格式列表
  9. 设置 CASMailbox -identity YOUR@EMAIL.ADDRESS -PopUseProtocolDefaults:$FALSE -ImapUseProtocolDefaults:$FALSE -PopForceICalForCalendarRetrievalOption:$TRUE -ImapForceICalForCalendarRetrievalOption:$TRUE
  10. 删除-PSSession $Session
  11. 设置-ExecutionPolicy -ExecutionPolicy 受限

现在,我在 Linux 上的 mutt 正在检索 iCalendar (.ics) 格式的会议邀请。