Office365'ten toplantı davetiyeleri nasıl alınır, böylece ayrıştırılıp bir takvime eklenebilir mi?


10

Outlook.office365.com adresinden iCalendar (.ics veya .ical) toplantı davetiyeleri nasıl alınır, böylece ayrıştırılıp bir takvime (remind + wyrd gibi) eklenebilir mi?

Uzun ve zor bir cevap aradım, ama hiç bulamadım, bu yüzden gerçekten önemsiz bir şeyi kaçırıp kaçırmadığımı merak ediyorum.

Fedora 20'de (Heisenbug) OfflineIMAP 6.5.5 ile Mutt 1.5.22 kullanıyorum.

İCalendar iletilerini takvimlere aktarılabilecek biçimlere ayrıştırmak için birçok komut dosyası vardır. Bu benim sorunum değil . Benim sorunum bile iCalendar iletileri almıyorum, bu yüzden ayrıştırmak için bir şey yok.

Toplantı davetiyesi gelen kutuma base64 kodlu metin / html mesajı olarak geliyor. Çok parçalı bir mesaj değildir ve ek yoktur . İletinin gövdesi, Microsoft Outlook Web Access'e (OWA) bir bağlantı içerir. Bağlantıyı takip etmek beni WebMail'e götürmek dışında bir şey yapmıyor gibi görünüyor. E-posta gövdesinin geri kalanı toplantı davetinin açıklamasını içerir.

Daveti iletmeyi ve daveti bir ek olarak iletmeyi denedim, ancak bunların hiçbiri mesajın biçimini etkilemedi.

İletinin başlıklarını inceledim, ancak hiçbir şey önemli olarak göze çarpmadı. Herkese bir şey ifade etmeleri ihtimaline karşı onları buraya kopyaladım:

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

Ayrıca WebMail'deki iletinin başlıklarını da inceledim. Daha fazla başlık vardı (bazıları tnef ile ilgili), ancak yine de takvimler veya davetiyelerle ilgili hiçbir şey görünmüyordu.

"Toplantı daveti" başlıklarını normal e-posta başlıklarıyla karşılaştırdım. Tek fark, normal bir e-postanın fazladan bir üstbilgi içermesidir: "X-Otomatik Yanıt-Gizleme: DR, RN, NRN, OOF, Otomatik Yanıt".

.Offlineimaprc'nin klasör filtresim, Takvim klasörünü senkronize etmeyecek şekilde ayarlanmış. Bunun nedeni, OfflineIMAP her senkronize etmeye çalıştığında, Takvim klasörünü senkronize ederken yüzün üzerinde aynı hatayla karşılaşmasıdır: "HATA: IMAP sunucusu 'uzak' UID ile bir mesaj içermiyor '[...]' ."

Takvim klasörünü incelemek için Python imaplib'ini kullanma:

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

Getirmeyi ikinci çağırdığımda, bir ileti döndürür: "Sunucu aşağıdaki iletiyi alamadı. İleti silinmedi. Outlook veya Outlook Web App kullanarak görüntüleyebilirsiniz. gönderen, iletinin ne dediğini öğrenir. "

WebMail'de Takvim klasörünün (Takvim sekmesi aracılığıyla erişilebilir) kuruluşun dışındaki görünürlük izinlerine sahip olduğunu görüyorum . Şu anda "Paylaşılmadı" olarak ayarlanmış. Diğer seçenekler "Yalnızca kullanılabilirlik", "Sınırlı ayrıntılar" veya "Tüm ayrıntılar" dır. İzinleri "Tam ayrıntılar" olarak ayarlamak ve ardından kendime bir toplantı daveti göndermek, toplantı daveti biçimini etkilemedi.

İCalendar iletisini almamanın bir çözümü olarak, Thunderbird'ü Lightning eklentisiyle açtım. Her nasılsa, Lightning eklentisi toplantı davetlerinin nasıl alınacağını biliyor. Mesajlar hala metin / html olarak görünüyor, ancak Thunderbird'ün durum çubuğunda bir bağlantı var. Tıklandığında daveti reddetmek veya kabul etmek isteyip istemediğinizi soran bir istem açılır.

Outlook 365'ten gelen toplantı davetlerinin neden iCalendar iletileri yerine basit metin / html iletileri olarak geldiğini düşünen var mı? Yapabileceğim bir şey var mı? Lightning eklentisi davetiyelerle çalışabiliyorsa, Microsoft Exchange Web Hizmetleri'ni (EWS) kullanma gibi bir çözüm olmalıdır. Çözüm bir aracı kodlamamı gerektiriyorsa, öyle olsun. Doğru yönde bir itiş çok takdir edilecektir.


Bu bağlantı yardımcı olabilir: blogs.technet.com/b/timmcmic/archive/2013/11/10/…
SEoF

1
@SEoF Yanıtınızı, başvurduğunuz bağlantıyı içeren bir yoruma dönüştürdüm. Cevabınızın çözümü sizin için neyin işe yaramadığını açıkladığından, onu sildim. Lütfen sadece bir sorunun nasıl çözüleceğini açıklayan cevaplar gönderin, dış kaynaklara bağlantılar cevap olarak kabul edilmez.
terdon

Yanıtlar:


3

Office 365 / Outlook'un web arabirimi aracılığıyla iCalendar biçiminde davetiyeler göndermesi için ayarlayabilirsiniz.

  1. Office 365 hesabınıza giriş yapın
  2. Posta Uygulamasını Aç (Outlook)
  3. Sağ üst köşedeki dişli çark simgesine basın (ayarlar)
  4. Arama kutusuna "imap" yazın
  5. "Pop ve IMAP" i seçin
  6. Altta, POP ve / veya IMAP için "iCalendar biçiminde etkinlik davetiyeleri gönder" i seçin.
  7. "Kaydet" i tıklayın

Artık tüm davetiyeleri iCalendar biçiminde almalısınız.


İhracat programını hatırlatmak için kendi görünüm takvimimi yazmak için e-posta ekleriyle çalışmaya çalışmaktan yoruldum. Doğrudan Office-365 API'sini çağırır ve biçimlendirilmiş girdileri hatırlatmak da dahil olmak üzere çeşitli şeyler çıktısı alabilir. Ihol (I Hate OutLook) olarak adlandırıldı .. github.com/eikenb/ihol
John Eikenberry

1

SEoF'un sağladığı bağlantı harika bir öneriydi. Blog gönderisi eksik, bence, ama beni doğru yolda başlattı. Biraz daha kazma yaptım ve Office 365'in iCalendar (.ics) biçiminde toplantı davetiyeleri göndermesini sağlamaya yönelik adımların tam bir listesini buldum.

Yönetici olmadığımı ve bana herhangi bir ayrıcalık tanımak için kimseyle iletişime geçmeme gerek olmadığını unutmayın. Tek uyarı, bir Windows kutusuna erişmeniz gerektiğidir. Ayarları Windows üzerinden değiştirdikten sonra, daha önce kullandığınız işletim sistemini kullanmaya geri dönebilirsiniz. Windows 7 kullanarak normal bir kullanıcı olarak aşağıdakileri kendi başıma yaptım:

  1. Http://www.microsoft.com/en-us/download/details.aspx?id=30653 adresinden Microsoft .NET Framework 4.5'i indirin ve yükleyin .
  2. Http://www.microsoft.com/en-us/download/details.aspx?id=40855 adresinden Windows Management Framework 4.0'ı (Windows6.1-KB2819745-x64-MultiPkg.msu) indirin ve yükleyin .
  3. PowerShell'i yönetici olarak çalıştırın.
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $ UserCredential = Kimlik Bilgisi Al
    • E-posta adresinizi ve parolanızı giriniz.
  6. $ Session = Yeni-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ UserCredential -Authentication Basic -AllowRedirection
  7. $ ImportResults = Import-PSSession $ Oturumu
  8. CASMailbox kimliği alın YOUR@EMAIL.ADDRESS | Biçim-List
  9. Set-CASMailbox -identity YOUR@EMAIL.ADDRESS -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption: $ TRUE
  10. Kaldır-PSSession $ Oturumu
  11. Set-ExecutionPolicy -ExecutionPolicy Kısıtlı

Linux'taki mutt'um, toplantı davetlerini iCalendar (.ics) biçiminde alıyor.


Bu mükemmel çalıştı. Ayrıntılı talimatlar için teşekkür ederiz.
Jason Day

0

OP'nin tam olarak sorduğu şey değil, ancak 3. taraf mantığına izin veriliyorsa, fantastik değişim nesnesine (python) göz atın . Önümüzdeki 3 ay için olayların getirilmesine ilişkin hızlı py3 örneği (yinelenen öğelerin uzatıldığını unutmayın):

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.