Como receber convites de reunião do Office365, para que possam ser analisados ​​e adicionados a um calendário?


10

Como receber convites de reunião do iCalendar (.ics ou .ical) do outlook.office365.com, para que possam ser analisados ​​e adicionados a um calendário (como lembrar + wyrd)?

Procurei uma resposta longa e árdua, mas não encontrei nenhuma, então me pergunto se estou perdendo algo realmente trivial.

Estou usando o Mutt 1.5.22 com o OfflineIMAP 6.5.5 no Fedora 20 (Heisenbug).

Existem muitos scripts disponíveis para analisar as mensagens do iCalendar em formatos que podem ser importados para calendários. Este não é o meu problema. Meu problema é que nem estou recebendo mensagens do iCalendar, portanto não tenho nada para analisar.

Um convite para reunião chega na minha caixa de entrada como uma mensagem de texto / html codificada em base64. É não uma mensagem concatenada e há sem anexos . O corpo da mensagem contém um link para o Microsoft Outlook Web Access (OWA). Seguir o link parece não fazer nada, exceto me levar ao WebMail. O restante do corpo do email contém a descrição do convite para a reunião.

Tentei encaminhar o convite e encaminhar o convite como anexo, mas nenhum deles afetou o formato da mensagem.

Inspecionei os cabeçalhos da mensagem, mas nada se destacou como importante. Eu os copiei aqui, caso eles signifiquem algo para algué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

Eu também inspecionei os cabeçalhos da mensagem no WebMail. Havia mais cabeçalhos (alguns relacionados ao tnef), mas, novamente, nada parecia relacionado a calendários ou convites.

Comparei os cabeçalhos de um "convite para reunião" com os cabeçalhos de um email normal. A única diferença é que um email normal contém um cabeçalho extra: "X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply".

O filtro de pastas do meu .offlineimaprc está definido para não sincronizar a pasta Calendário. Isso ocorre porque toda vez que o OfflineIMAP tentava sincronizar, ocorria mais de cem instâncias do mesmo erro ao sincronizar a pasta Calendário: "ERRO: O servidor IMAP 'remoto' não tem uma mensagem com o UID '[...]' . "

Usando o imaplib do Python para inspecionar a pasta Calendário:

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

Na segunda vez em que chamo a busca, ele retorna uma mensagem: "O servidor não pôde recuperar a seguinte mensagem. A mensagem não foi excluída. Você pode visualizá-la usando o Outlook ou o Outlook Web App. Você também pode entrar em contato remetente para descobrir o que a mensagem diz ".

No WebMail, vejo que a pasta Calendário (acessível através da guia Calendário) tem permissões para visibilidade fora da organização . No momento, está definido como "Não compartilhado". Outras opções são "Somente disponibilidade", "Detalhes limitados" ou "Detalhes completos". Definir as permissões para "Detalhes completos" e depois enviar um convite para reunião para mim não teve efeito no formato do convite para reunião.

Como solução alternativa para não receber a mensagem do iCalendar, tenho o Thunderbird aberto com o complemento Lightning. De alguma forma, o complemento Lightning sabe como receber convites para reuniões. As mensagens ainda aparecem como texto / html, mas há um link na barra de status do Thunderbird. Clicar nele abre uma solicitação perguntando se deseja recusar ou aceitar o convite.

Alguém tem alguma idéia de por que os convites para reunião do Outlook 365 estão chegando como simples mensagens de texto / html em vez de mensagens do iCalendar? Há algo que eu possa fazer? Se o complemento Lightning puder funcionar com os convites, deve haver uma solução, como o uso do Microsoft Exchange Web Services (EWS). Se a solução exigir que eu codifique uma ferramenta, que assim seja. Um empurrão na direção certa seria muito apreciado.



1
@SEoF Eu converti sua resposta em um comentário fornecendo o link ao qual você estava se referindo. Como os res da sua resposta estavam explicando o que não funcionou para você, eu a apaguei. Poste apenas respostas que realmente expliquem como resolver um problema, links para recursos externos não são considerados respostas.
terdon

Respostas:


3

Você pode configurá-lo para que o Office 365 / Outlook envie convites formatados no formato iCalendar pela interface da web.

  1. Entre na sua conta do Office 365
  2. Abrir aplicativo de email (Outlook)
  3. Clique no ícone de roda dentada no canto superior direito (configurações)
  4. Na caixa de pesquisa, digite "imap"
  5. Selecione "Pop e IMAP"
  6. Na parte inferior, selecione "Enviar convites para eventos no formato iCalendar" para POP e / ou IMAP.
  7. Clique em "Salvar"

Agora você deve receber todos os convites no formato iCalendar.


Eu cansei de tentar trabalhar com anexos de e-mail para escrever meu próprio calendário do Outlook para lembrar o programa de exportação. Ele chama a API do Office-365 diretamente e pode produzir várias coisas, incluindo lembretes formatados. Chamado ihol (I Hate OutLook
John Eikenberry

1

O link que o SEoF forneceu foi uma ótima sugestão. O post do blog está incompleto, na minha opinião, mas me ajudou a seguir o caminho certo. Pesquisei um pouco mais e criei uma lista completa de etapas para fazer o Office 365 me enviar convites para reuniões no formato iCalendar (.ics).

Observe que não sou administrador e não precisei entrar em contato com ninguém para me dar privilégios. A única ressalva é que você precisa acessar uma caixa do Windows. Depois de alterar as configurações pelo Windows, você pode voltar a usar o sistema operacional que estava usando antes. Fiz o seguinte sozinho como um usuário normal usando o Windows 7:

  1. Baixe e instale o Microsoft .NET Framework 4.5 em http://www.microsoft.com/en-us/download/details.aspx?id=30653 .
  2. Baixe e instale o Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) em http://www.microsoft.com/en-us/download/details.aspx?id=40855 .
  3. Execute o PowerShell como administrador.
  4. Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. $ UserCredential = Get-Credential
    • Digite seu endereço de e-mail e senha.
  6. $ Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $ UserCredential -Authentication Basic -AllowRedirection
  7. $ ImportResults = Sessão $ Import-PSSession $
  8. Get-CASMailbox -identity YOUR@EMAIL.ADDRESS | Format-List
  9. Set-CASMailbox -identity YOUR@EMAIL.ADDRESS -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption: $ TRUE
  10. Sessão Remove-PSSession $
  11. Set-ExecutionPolicy -ExecutionPolicy restrito

Agora, meu vira-lata no Linux está recuperando convites para reuniões no formato iCalendar (.ics).


Isso funcionou perfeitamente. Obrigado pelas instruções detalhadas.
Jason Day

0

Não é exatamente o que o OP pediu, mas se a lógica de terceiros for permitida, confira o fantástico exchangelib (python). Exemplo rápido de py3 de busca de eventos pelos próximos 3 meses (observe que os itens recorrentes foram estendidos):

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.