Office365에서 모임 초대를 받아 일정을 분석하고 일정에 추가하는 방법은 무엇입니까?


10

outlook.office365.com에서 iCalendar (.ics 또는 .ical) 미팅 초대장을 수신하여 파싱하고 캘린더 (예 : remind + wyrd)에 추가 할 수있는 방법은 무엇입니까?

나는 답을 찾기 위해 오랫동안 열심히 노력했지만 아무것도 찾지 못했습니다. 그래서 정말 사소한 것을 놓치고 있는지 궁금합니다.

Fedora 20 (Heisenbug)에서 OfflineIMAP 6.5.5와 함께 Mutt 1.5.22를 사용하고 있습니다.

캘린더로 가져올 수있는 형식으로 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이 동기화를 시도 할 때마다 일정 폴더를 동기화 할 때 동일한 오류가 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)")

두 번째로 가져 오기를 호출하면 "서버에서 다음 메시지를 검색 할 수 없습니다. 메시지가 삭제되지 않았습니다. Outlook 또는 Outlook Web App을 사용하여 메시지를 볼 수 있습니다. 발신자가 메시지의 내용을 알 수 있습니다. "

WebMail에서 캘린더 폴더 (캘린더 탭을 통해 액세스 가능)에 조직 외부의 가시성에 대한 권한이 있음을 알았습니다 . 현재 '공유되지 않음'으로 설정되어 있습니다. 다른 옵션으로는 "가용성 만", "제한된 세부 사항"또는 "전체 세부 사항"이 있습니다. 사용 권한을 "전체 세부 정보"로 설정 한 다음 모임 초대를 자신에게 보내는 것은 모임 초대 형식에 영향을 미치지 않았습니다.

iCalendar 메시지를받지 못하는 문제를 해결하기 위해 Lightning 추가 기능으로 Thunderbird를 열었습니다. 어쨌든 Lightning 애드온은 모임 초대를받는 방법을 알고 있습니다. 메시지는 여전히 텍스트 / html로 표시되지만 Thunderbird의 상태 표시 줄에 링크가 있습니다. 클릭하면 초대를 거부할지 또는 수락할지 묻는 프롬프트가 열립니다.

Outlook 365의 초대가 iCalendar 메시지가 아닌 단순한 문자 / html 메시지로 도착하는 이유를 아는 사람이 있습니까? 제가 뭔가할만한 일이 있을까요? 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. 하단에서 POP 및 / 또는 IMAP에 대해 "iCalendar 형식으로 이벤트 초대 보내기"를 선택하십시오.
  7. "저장"을 누르십시오

이제 모든 초대장을 iCalendar 형식으로 가져와야합니다.


이메일 첨부 파일을 사용하여 프로그램 내보내기를 상기시키기 위해 자신의 Outlook 일정표를 작성하는 데 지쳤습니다. Office-365 API를 직접 호출하고 형식이 지정된 항목을 포함하여 다양한 것을 출력 할 수 있습니다. 명명 된이 (I Outlook을 증오) .. ihol github.com/eikenb/ihol
존 아이켄 베리

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 원격 서명
  5. $ UserCredential = Get-Credential
    • 이메일 주소와 비밀번호를 입력하십시오.
  6. $ Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ UserCredential-인증 기본 -AllowRedirection
  7. $ ImportResults = 수입 -PS 세션 $ 세션
  8. Get-CASMailbox-신분 YOUR@EMAIL.ADDRESS | 형식 목록
  9. Set-CASMailbox -identity Your@EMAIL.ADDRESS -PopUseProtocolDefaults : $ FALSE -ImapUseProtocolDefaults : $ FALSE -PopForceICalForCalendarRetrievalOption : $ TRUE -ImapForceICalForCalendarRetrievalOption : $ TRUE
  10. PSSession $ Session를 제거하십시오
  11. Set-ExecutionPolicy -ExecutionPolicy 제한됨

이제는 Linux에서 음소거가 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))

또 다른 좋은 라이브러리는 github.com/Narcolapser/python-o365
John Eikenberry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.