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

9

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

Eu procurei muito e por uma resposta, mas não encontrei nenhuma, então eu Pergunto-me se estou apenas sentindo falta de algo realmente trivial.

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

Existem muitos scripts para analisar as mensagens do iCalendar formatos que podem ser importados para calendários. Isso não é não meu problema. Meu problema é que eu nem estou recebendo mensagens do iCalendar, então eu tenho nada para analisar.

Um convite de reunião chega à minha caixa de entrada como um texto / html codificado na base64 mensagem. Não é não uma mensagem multiparte e não há nenhum anexo . O corpo da mensagem contém um link para o Microsoft Outlook Web Acesso (OWA). Após o link não parece fazer nada, exceto leve-me ao WebMail. O restante do corpo do email contém a descrição do convite da reunião.

Eu tentei encaminhar o convite e encaminhar o convite como um anexo, mas nenhum deles afetou o formato da mensagem.

Eu inspecionei os cabeçalhos da mensagem, mas nada se destacou como sendo importante. Eu copiei eles aqui, caso eles signifiquem algo para qualquer um:

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 a tnef), mas novamente, nada parecia relacionado para calendários ou convites.

Eu comparei os cabeçalhos de um "convite de reunião" com os cabeçalhos de um e-mail normal. A única diferença foi que um email normal contém um cabeçalho extra: "X-Auto-Resposta-Suprimir: DR, RN, NRN, OOF, Resposta Automática".

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

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

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

Na segunda vez que eu chamo fetch, ele retorna uma mensagem: "O servidor não recuperar a seguinte mensagem. A mensagem não foi apagada. Você pode ser capaz de visualizá-lo usando o Outlook ou o Outlook Web App. Você também pode contatar o remetente para descobrir o que a mensagem diz. "

No WebMail, vejo que a pasta Calendário (acessível via Calendário) tem permissões para visibilidade fora da organização . Está atualmente definido como "Não compartilhado". Outras opções são "Disponibilidade apenas "," Detalhes limitados "ou" Detalhes completos ". Definir as permissões para "Detalhes completos" e, em seguida, enviar um convite de reunião para mim não teve nenhum efeito no formato do convite da reunião.

Como solução alternativa para não receber mensagens do iCalendar, tenho o Thunderbird abra com o complemento Lightning. De alguma forma, o complemento Lightning sabe como para receber convites para reuniões. As mensagens ainda aparecem como text / html, mas há um link na barra de status do Thunderbird. Clicar nele abre um pedir imediatamente se negar ou aceitar o convite.

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

    
por user3295332 31.03.2014 / 05:11

3 respostas

1

O link fornecido pelo SEoF foi uma ótima sugestão. O post do blog está incompleto, na minha opinião, mas me fez começar no caminho certo. Fiz um pouco mais de pesquisa e criei uma lista completa de etapas para fazer com que o Office 365 enviasse convites de reunião no formato iCalendar (.ics).

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

  1. Faça o download e instale o Microsoft .NET Framework 4.5 a partir do link .
  2. Baixe e instale o Windows Management Framework 4.0 (Windows6.1-KB2819745-x64-MultiPkg.msu) em link .
  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 link -Credential $ UserCredential -Authentication Basic - AllowRedirection
  7. $ ImportResults = Importar-PSSession $ Session
  8. Get-CASMailbox -identity [email protected] | Format-List
  9. Set-CASMailbox -identity [email protected] -PopUseProtocolDefaults: $ FALSE -ImapUseProtocolDefaults: $ FALSE -PopForceICalForCalendarRetrievalOption: $ TRUE -ImapForceICalForCalendarRetrievalOption: $ TRUE
  10. Remove-PSSession $ Session
  11. Set-ExecutionPolicy -ExecutionPolicy restrito

Agora, meu mutt no Linux está recuperando convites de reunião no formato iCalendar (.ics).

    
por 15.10.2014 / 02:08
3

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

  1. Faça login na sua conta do Office 365
  2. Aplicativo Open Mail (Outlook)
  3. Pressione o í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. Pressione "Salvar"

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

    
por 23.01.2017 / 20:23
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 buscar eventos pelos próximos 3 meses (note 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='[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))
    
por 11.04.2017 / 03:17

Tags