Làm cách nào để nhận được lời mời họp từ Office365, để chúng có thể được phân tích cú pháp và thêm vào lịch?


10

Làm cách nào để nhận được lời mời họp của iCalWiki (.ics hoặc .ical) từ triển vọng.office365.com, để chúng có thể được phân tích cú pháp và thêm vào lịch (như nhắc nhở + wyrd)?

Tôi đã tìm kiếm rất lâu để tìm câu trả lời, nhưng không tìm thấy câu trả lời nào, vì vậy tôi tự hỏi liệu tôi có đang thiếu thứ gì đó thực sự tầm thường không.

Tôi đang sử dụng Mutt 1.5.22 với OfflineIMAP 6.5.5 trên Fedora 20 (Heisenorms).

Có nhiều tập lệnh ngoài kia để phân tích thông điệp iCalWiki thành các định dạng có thể được nhập vào lịch. Đây không phải là vấn đề của tôi. Vấn đề của tôi là tôi thậm chí không nhận được tin nhắn iCalWiki, vì vậy tôi không có gì để phân tích.

Một lời mời họp đến trong hộp thư đến của tôi dưới dạng tin nhắn văn bản / html được mã hóa base64. Nó không phải là một tin nhắn nhiều phần và không có tệp đính kèm . Phần thân của thông báo chứa một liên kết đến Microsoft Outlook Web Access (OWA). Theo liên kết dường như không làm gì cả ngoại trừ đưa tôi đến WebMail. Phần còn lại của cơ thể email chứa mô tả về lời mời họp.

Tôi đã thử chuyển tiếp lời mời và chuyển tiếp lời mời dưới dạng tệp đính kèm, nhưng cả hai đều không ảnh hưởng đến định dạng của tin nhắn.

Tôi đã kiểm tra các tiêu đề của tin nhắn, nhưng không có gì nổi bật là quan trọng. Tôi đã sao chép chúng ở đây, trong trường hợp chúng có ý nghĩa với bất cứ ai:

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

Tôi cũng đã kiểm tra các tiêu đề của tin nhắn trong WebMail. Có nhiều tiêu đề hơn (một số liên quan đến tnef), nhưng một lần nữa, dường như không có gì liên quan đến lịch hoặc lời mời.

Tôi đã so sánh các tiêu đề của một "lời mời họp" với các tiêu đề của một email bình thường. Sự khác biệt duy nhất là một email bình thường chứa một tiêu đề bổ sung: "X-Auto-Feedback-Suppress: DR, RN, NRN, OOF, AutoReply".

Bộ lọc thư mục .offlineimaprc của tôi được đặt thành không đồng bộ hóa thư mục Lịch. Điều này là do mỗi lần OfflineIMAP cố gắng đồng bộ hóa, nó sẽ gặp phải hơn một trăm trường hợp lỗi tương tự khi đồng bộ hóa thư mục Lịch: "LRI: máy chủ IMAP 'từ xa' không có tin nhắn với UID '[...]' . "

Sử dụng imaplib của Python để kiểm tra thư mục Lịch:

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

Lần thứ hai tôi gọi tìm nạp, nó trả về một thông báo: "Máy chủ không thể truy xuất tin nhắn sau. Tin nhắn chưa bị xóa. Bạn có thể xem nó bằng Outlook hoặc Outlook Web App. Bạn cũng có thể liên hệ người gửi để tìm hiểu những gì tin nhắn nói. "

Trong WebMail, tôi thấy rằng thư mục Lịch (có thể truy cập qua tab Lịch) có quyền cho khả năng hiển thị bên ngoài tổ chức . Hiện tại nó được đặt thành "Không chia sẻ". Các tùy chọn khác là "Chỉ có sẵn", "Chi tiết giới hạn" hoặc "Chi tiết đầy đủ". Đặt quyền thành "Chi tiết đầy đủ" và sau đó gửi lời mời họp cho chính tôi không có bất kỳ ảnh hưởng nào đến định dạng của lời mời họp.

Như một giải pháp cho việc không nhận được tin nhắn iCalWiki, tôi mở Thunderbird bằng tiện ích Lightning. Bằng cách nào đó, tiện ích Lightning biết cách nhận lời mời họp. Các thông báo vẫn hiển thị dưới dạng văn bản / html, nhưng có một liên kết trong thanh trạng thái của Thunderbird. Nhấp vào nó sẽ mở ra một dấu nhắc hỏi xem nên từ chối hoặc chấp nhận lời mời.

Bất cứ ai cũng có ý tưởng tại sao cuộc họp lời mời từ Outlook 365 lại đến dưới dạng tin nhắn văn bản / html đơn giản thay vì tin nhắn iCalWiki? Có bất cứ điều gì tôi có thể làm? Nếu bổ trợ Lightning có thể hoạt động với các lời mời, thì phải có một giải pháp, chẳng hạn như sử dụng Microsoft Exchange Web Services (EWS). Nếu giải pháp sẽ yêu cầu tôi mã hóa một công cụ, thì hãy là nó. Một cú hích đúng hướng sẽ được đánh giá rất cao.


Liên kết này có thể hữu ích: blog.technet.com/b/timmcmic/archive/2013/11/10/ồng
SEoF

1
@SEoF Tôi đã chuyển đổi câu trả lời của bạn thành một nhận xét đưa ra liên kết mà bạn đang đề cập đến. Vì độ phân giải của câu trả lời của bạn là giải thích những gì không hiệu quả với bạn, tôi đã xóa nó. Vui lòng chỉ đăng câu trả lời thực sự giải thích cách giải quyết vấn đề, liên kết đến các tài nguyên bên ngoài không được coi là câu trả lời.
terdon

Câu trả lời:


3

Bạn có thể đặt nó để Office 365 / Outlook gửi lời mời được định dạng ở định dạng iCalWiki qua giao diện web.

  1. Đăng nhập vào tài khoản Office 365 của bạn
  2. Ứng dụng thư mở (Outlook)
  3. Nhấn biểu tượng bánh răng ở góc trên bên phải (cài đặt)
  4. Trong hộp tìm kiếm gõ "imap"
  5. Chọn "Pop và IMAP"
  6. Ở phía dưới, chọn "Gửi lời mời sự kiện ở định dạng iCalWiki" cho POP và / hoặc IMAP.
  7. Nhấn "Lưu"

Bây giờ bạn sẽ nhận được tất cả các lời mời ở định dạng iCalWiki.


Tôi cảm thấy mệt mỏi khi cố gắng làm việc với các tệp đính kèm email để viết lịch triển vọng của riêng mình để nhắc nhở chương trình xuất khẩu. Nó gọi API Office-365 trực tiếp và có thể xuất ra nhiều thứ khác nhau, bao gồm các mục được định dạng nhắc nhở. Được đặt tên là ihol (Tôi ghét OutLook) .. github.com/eikenb/ihol
John Eikenberry

1

Liên kết mà SEoF cung cấp là một gợi ý tuyệt vời. Theo tôi, bài viết trên blog không đầy đủ, nhưng nó đã giúp tôi bắt đầu đi đúng hướng. Tôi đã thực hiện thêm một số hoạt động đào và đưa ra một danh sách đầy đủ các bước để nhận Office 365 gửi cho tôi lời mời họp theo định dạng iCalWiki (.ics).

Lưu ý rằng tôi không phải là quản trị viên và tôi không cần liên hệ với bất kỳ ai để cho tôi bất kỳ đặc quyền nào. Nhắc nhở duy nhất là bạn cần truy cập vào một hộp Windows. Khi bạn thay đổi cài đặt qua Windows, bạn có thể quay lại sử dụng bất kỳ HĐH nào bạn đang sử dụng trước đó. Tôi đã tự mình làm như một người dùng bình thường khi sử dụng Windows 7:

  1. Tải xuống và cài đặt Microsoft .NET Framework 4.5 từ http://www.microsoft.com/en-us/doad/details.aspx?id=30653 .
  2. Tải xuống và cài đặt Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) từ http://www.microsoft.com/en-us/doad/details.aspx?id=40855 .
  3. Chạy PowerShell với tư cách quản trị viên.
  4. Set-ExecutPolicy -ExecutPolicy RemoteSign
  5. $ UserCredential = Nhận thông tin xác thực
    • Nhập địa chỉ email và mật khẩu của bạn.
  6. $ Phiên = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ UserCredential -Authentication Basic-ALLowRedirection
  7. $ ImportResults = Nhập-PSSession $ Phiên
  8. Get-CASMailbox -identity YOU@EMAIL.ADDRESS | Danh sách định dạng
  9. Set-CASMailbox -identity CỦA BẠN @ MẠNG
  10. Phiên gỡ bỏ-PSSession $
  11. Set-ExecutPolicy -ExecutPolicy bị hạn chế

Bây giờ, mutt của tôi trên Linux đang lấy lời mời họp theo định dạng iCalWiki (.ics).


Điều này làm việc hoàn hảo. Cảm ơn bạn đã hướng dẫn chi tiết.
Ngày Jason

0

Không chính xác những gì OP yêu cầu, nhưng nếu logic của bên thứ 3 được cho phép, thì hãy kiểm tra exchangeelib (python) tuyệt vời . Ví dụ nhanh về py3 về các sự kiện tìm nạp trong 3 tháng tới (lưu ý rằng các mục định kỳ đã được mở rộng):

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

Một thư viện tốt khác là github.com/Narcolapser/python-o365
John Eikenberry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.