Office365から会議の招待状を受け取り、それらを解析してカレンダーに追加するにはどうすればよいですか?


10

iCalendar(.icsまたは.ical)会議の招待状をoutlook.office365.comから受信して、解析してカレンダーに追加できるようにする方法(リマインド+ wyrdなど)?

私は長い間懸命に答えを探しましたが、何も見つかりませんでしたので、本当に些細なことを見逃しているだけなのでしょうか。

Fedora 20(Heisenbug)のOfflineIMAP 6.5.5でMutt 1.5.22を使用しています。

iCalendarメッセージをカレンダーにインポートできる形式に解析するためのスクリプトは数多くあります。これは私の問題ではありません。私の問題は、iCalendarメッセージも受信しないため、解析するものがないことです。

会議の招待状が、base64でエンコードされたtext / 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のfolderfilterがCalendarフォルダーを同期しないように設定されています。これは、OfflineIMAPが同期しようとするたびに、Calendarフォルダーの同期中に同じエラーが100回以上発生するためです:「エラー: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)")

2回目にfetchを呼び出すと、「サーバーは次のメッセージを取得できませんでした。メッセージは削除されていません。OutlookまたはOutlook Web Appを使用して表示できる可能性があります。連絡することもできます。送信者にメッセージの内容を確認してもらいます。」

WebMailで、[予定表]タブ([予定表]タブからアクセス可能)に組織外の可視性に対する権限があることがわかりました 現在、「共有しない」に設定されています。その他のオプションは、「可用性のみ」、「限定された詳細」、または「完全な詳細」です。権限を「完全な詳細」に設定し、会議の招待状を自分に送信しても、会議の招待状の形式に影響はありませんでした。

iCalendarメッセージを受信しないための回避策として、ThunderbirdをLightningアドオンで開いています。どういうわけか、Lightningアドオンは会議の招待状を受信する方法を知っています。メッセージは引き続きtext / htmlとして表示されますが、Thunderbirdのステータスバーにリンクがあります。それをクリックすると、招待を拒否するか受け入れるかを尋ねるプロンプトが開きます。

Outlook 365からの会議への招待がiCalendarメッセージではなく単純なテキスト/ htmlメッセージとして届く理由を誰かが知っていますか?何か私にできることはありますか?Lightningアドオンが招待を処理できる場合、Microsoft Exchange Webサービス(EWS)を使用するなどの解決策が必要です。ソリューションでツールのコーディングが必要になる場合は、そうしてください。正しい方向へのプッシュは大歓迎です。


このリンクは役に立つかもしれません:blogs.technet.com/b/timmcmic/archive/2013/11/10/...
SEOF

1
@SEoFあなたの回答を、あなたが参照していたリンクを示すコメントに変換しました。あなたの答えの回答はあなたにとってうまくいかなかったことを説明しているので、私はそれを削除しました。問題の解決方法を実際に説明する回答のみを投稿してください。外部リソースへのリンクは回答とは見なされません。
terdon

回答:


3

Office 365 / OutlookがWebインターフェイスを介してiCalendar形式でフォーマットされた招待状を送信するように設定できます。

  1. Office 365アカウントにログインします
  2. メールアプリを開く(Outlook)
  3. 右上隅にある歯車アイコンをクリックします(設定)
  4. 検索ボックスに「imap」と入力します
  5. [ポップとIMAP]を選択します
  6. POPやIMAPの下部にある[iCalendar形式でイベントへの招待状を送信]を選択します。
  7. 「保存」を押します

すべての招待状がiCalendar形式で取得されます。


メールの添付ファイルを操作して、エクスポートプログラムを思い出させる独自のOutlookカレンダーを作成しようとすることにうんざりしました。Office-365 APIを直接呼び出し、リマインドフォーマットされたエントリを含むさまざまなものを出力できます。iholという名前(I Hate OutLook).. github.com/eikenb/ihol
John

1

SEoFが提供したリンクは素晴らしい提案でした。私の意見では、ブログの投稿は不完全ですが、正しい方向に進むことができました。さらに掘り下げて、Office 365にiCalendar(.ics)形式の会議招待状を送信するための手順の完全なリストを思いつきました。

私は管理者ではないので、特権を与えるために誰かに連絡する必要はありませんでした。唯一の注意点は、Windowsボックスにアクセスする必要があることです。Windows経由で設定を変更すると、以前使用していたOSを使用できるようになります。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 = Get-Credential
    • メールアドレスとパスワードを入力してください。
  6. $ Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ UserCredential -Authentication Basic -AllowRedirection
  7. $ ImportResults = Import-PSSession $ Session
  8. Get-CASMailbox -identity YOUR@EMAIL.ADDRESS | フォーマットリスト
  9. Set-CASMailbox -identity YOUR@EMAIL.ADDRESS -PopUseProtocolDefaults:$ FALSE -ImapUseProtocolDefaults:$ FALSE -PopForceICalForCalendarRetrievalOption:$ TRUE -ImapForceICalForCalendarRetrievalOption:$ TRUE
  10. Remove-PSSession $ Session
  11. Set-ExecutionPolicy -ExecutionPolicy Restricted

Linux上の私のmuttは、iCalendar(.ics)形式で会議の招待状を取得しています。


これは完全に機能しました。詳しい説明ありがとうございます。
Jason Day

0

OPが正確に何を要求したかではありませんが、サードパーティのロジックが許可されている場合は、素晴らしいexchangelib(python)をチェックしてください。次の3か月のイベントを取得する簡単なpy3の例(定期的なアイテムが延長されていることに注意してください):

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

もう1つの優れたライブラリはgithub.com/Narcolapser/python-o365です
John
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.