outlook.office365.com에서 iCalendar(.ics 또는 .ical) 모임 초대를 받아 구문 분석하고 캘린더에 추가하려면 어떻게 해야 합니까(예: 알림 + wyrd)?
오랫동안 답을 찾으려고 노력했지만 아무것도 찾지 못해서 아주 사소한 것을 놓치고 있는 것은 아닌지 궁금합니다.
저는 Fedora 20(Heisenbug)에서 Mutt 1.5.22와 OfflineIMAP 6.5.5를 사용하고 있습니다.
iCalendar 메시지를 달력으로 가져올 수 있는 형식으로 구문 분석하는 데 사용할 수 있는 많은 스크립트가 있습니다. 이것은아니요내 질문. 내 문제는 iCalendar 메시지도 받지 못해서 구문 분석할 것이 없다는 것입니다.
회의 초대장은 Base64로 인코딩된 텍스트/html 메시지로 내 받은 편지함에 도착합니다. 이것은아니요다중 부분 메시지가 있고첨부파일 없음. 메시지 본문에는 Microsoft OWA(Outlook Web Access)에 대한 링크가 포함되어 있습니다. 링크를 클릭하면 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("[email protected]", "PASSWORD")
('OK', ['LOGIN completed.'])
>>> i.select("Calendar")
('OK', ['159'])
>>> i.fetch(159, "(RFC822)")
('OK', [None])
>>> i.fetch(159, "(RFC822)")
두 번째로 가져오기를 호출하면 다음 메시지가 반환됩니다. "서버가 다음 메시지를 검색할 수 없습니다. 메시지는 삭제되지 않았습니다. Outlook 또는 Outlook Web App을 사용하여 볼 수 있습니다. 보낸 사람에게 연락하여 내용을 확인할 수도 있습니다. 메시지의."
웹메일에서 캘린더 폴더(캘린더 탭을 통해 액세스 가능)에 공개 권한이 있는 것을 확인했습니다.외부 조직. 현재 '공유 안 함'으로 설정되어 있습니다. 다른 옵션으로는 "가용성만", "제한된 세부 정보" 또는 "전체 세부 정보"가 있습니다. 권한을 "전체 세부 정보"로 설정한 다음 자신에게 회의 초대장을 보내도 회의 초대장 형식에는 영향을 미치지 않습니다.
iCalendar 메시지를 받지 못하는 문제를 해결하기 위해 Lightning 플러그인을 사용하여 Thunderbird를 열었습니다. 어떻게든 Lightning 플러그인은 회의 초대를 받는 방법을 알고 있습니다. 메시지는 여전히 text/html로 표시되지만 Thunderbird의 상태 표시줄에는 링크가 있습니다. 이를 클릭하면 초대를 거절할지 아니면 수락할지 묻는 메시지가 열립니다.
Outlook 365의 모임 초대가 iCalendar 메시지 대신 간단한 text/html 메시지로 도착하는 이유를 아는 사람이 있습니까? 내가 할 수 있는게 있습니까? Lightning 플러그인이 초대를 처리할 수 있다면 Microsoft EWS(Exchange Web Services)를 사용하는 등의 솔루션이 있어야 합니다. 솔루션을 위해 도구를 작성해야 한다면 그렇게 하십시오. 올바른 방향으로 나아가면 크게 감사하겠습니다.
답변1
SEoF에서 제공하는 링크는 좋은 제안입니다. 내 생각에는 이 블로그 게시물이 완전하지는 않지만 올바른 길로 안내해 줍니다. 좀 더 자세히 조사한 결과 Office 365에서 iCalendar(.ics) 형식으로 모임 초대장을 보내도록 하는 전체 단계 목록을 생각해냈습니다.
저는 관리자가 아니므로 권한을 부여하기 위해 누구에게도 연락할 필요가 없습니다. 주목해야 할 유일한 점은 Windows 상자에 액세스해야 한다는 것입니다. Windows를 통해 설정을 변경한 후에는 사용 중이던 운영 체제로 돌아갈 수 있습니다. Windows 7을 사용하여 일반 사용자로서 다음을 직접 수행했습니다.
- 다음에서 Microsoft .NET Framework 4.5를 다운로드하여 설치하세요.http://www.microsoft.com/en-us/download/details.aspx?id=30653.
- 다음 위치에서 Windows Management Framework 4.0(Windows6.1-KB2819745-x64-MultiPkg.msu)을 다운로드하여 설치합니다.http://www.microsoft.com/en-us/download/details.aspx?id=40855.
- PowerShell을 관리자로 실행합니다.
- Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
- $UserCredential = 자격 증명 받기
- 이메일 주소와 비밀번호를 입력하세요.
- $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUrihttps://outlook.office365.com/powershell-liveid/-Credentials$UserCredential -AuthenticationBasic -AllowRedirection
- $ImportResults = 가져오기-PSSession $Session
- CASMailbox ID 가져오기[이메일 보호됨]|형식 목록
- CASMailbox-identity 설정[이메일 보호됨]-PopUseProtocolDefaults:$FALSE -ImapUseProtocolDefaults:$FALSE -PopForceICalForCalendarRetrievalOption:$TRUE -ImapForceICalForCalendarRetrievalOption:$TRUE
- 삭제-PSSession $Session
- Set-ExecutionPolicy -ExecutionPolicy 제한됨
현재 내 Linux의 mutt는 iCalendar(.ics) 형식의 회의 초대를 검색하고 있습니다.
답변2
Office 365/Outlook이 웹 인터페이스를 통해 iCalendar 형식으로 초대를 보내도록 설정할 수 있습니다.
- Office 365 계정에 로그인
- 메일 응용 프로그램(Outlook)을 엽니다.
- 오른쪽 상단에 있는 톱니바퀴 아이콘(설정)을 클릭하세요.
- 검색창에 "imap"을 입력하세요
- "팝 및 IMAP"을 선택하세요.
- POP 및/또는 IMAP의 경우 하단의 "iCalendar 형식으로 이벤트 초대장 보내기"를 선택하세요.
- "저장"을 클릭하세요
이제 모든 초대장을 iCalendar 형식으로 받게 됩니다.
답변3
OP가 요구한 것과 정확히 일치하지는 않지만 제3자 논리가 허용된다면 훌륭한 점을 살펴보십시오.교환 도서관(파이썬). 다음 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='[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))