2015-08-05 48 views
7

Sto costruendo un servizio che analizza le e-mail delle persone per specifici allegati PDF e li indicizza. Ho implementato questo con OAuth2 per Gmail utilizzando il loro esteso Gmail API che funziona perfettamente bene.Come leggere l'e-mail di Outlook con Oauth2?

Ora voglio implementare lo stesso per outlook/live/hotmail. Così ho cercato in giro e ho letto principalmente che youcan "Connetti a Outlook.com IMAP utilizzando OAuth 2.0" (tutorial here). Il fatto è che questo implementa una piena connessione IMAP. Per quanto ne so, questo è più destinato alle applicazioni aftermarket con le quali l'utente può visualizzare e inviare la sua e-mail, non per le applicazioni che devono scaricare alcune e-mail in background (come la mia).

Non ho lavorato con IMAP dall'interno del codice, ma i principali problemi che vedo con questo ora è che:

  1. Se leggo le email che saranno impostati a "leggere" nella casella di posta del utente, che ovviamente non voglio (non voglio interferire con il normale utilizzo dell'email dell'utente).
  2. Avrò bisogno di rimanere connesso a tutte le caselle di posta in arrivo o di passare continuamente attraverso tutte le caselle di posta in arrivo per ricevere nuove e-mail.

Le mie domande sono effettivamente;

  1. Non c'è altro modo di IMAP per ottenere gli utenti outlook.com e-mail?
  2. Oppure i miei problemi non sono effettivamente problemi e dovrei creare un "ricevitore" IMAP per tutti gli account di posta elettronica outlook?
+2

Punto 1 non è un problema. Hai solo bisogno di usare le varianti body.peek del recupero per evitare di impostare il flag di lettura. – Max

+1

E come per l'articolo 2, probabilmente dovresti avere una connessione per account, e usare l'estensione IMAP 'IDLE', che è generalmente onnipresente. – tripleee

+0

Hai passato questo? https://msdn.microsoft.com/en-us/library/dn440163.aspx –

risposta

1

In risposta al punto 1, in base a Max, è possibile utilizzare body.peak per evitare questo.

In risposta al punto 2, in base a triplee, è possibile connettersi a tutti gli account e quindi utilizzare un interno IMAP denominato IDLE.

In risposta al punto 3 #, ho trovato il Outlook REST API, che include opzioni per leggere l'e-mail e si può chiamare GET https://outlook.office.com/api/beta/me/messages su base regolare per ottenere tutti i messaggi in account dell'utente oppure è possibile chiamare GET https://outlook.office.com/api/v1.0/me/messages su base regolare per ottenere tutti i messaggi nella posta in arrivo dell'utente. È possibile trovare un elenco completo delle operazioni delle API REST here.

In risposta al punto 4, credo che alcuni dei vostri problemi siano problemi e altri no. Credo che tu non abbia problemi tecnici. Tuttavia, credo che lei ha ragione che IMAP non è stato progettato per applicazioni come la tua, come è mostrato nella Wikipedia article on IMAP che legge (in grassetto è mio),

In informatica, Internet Message Access Protocol (IMAP) è un Protocollo Internet standard utilizzato dai client di posta elettronica per recuperare i messaggi di posta elettronica da un server di posta tramite una connessione TCP/IP. IMAP è definito da RFC 3501.

Inoltre RFC 3501 che definisce il protocollo IMAP originale si riferisce alla posta elettronica i clienti che dal absract recita (in grassetto è mio),

Internet Message Access Protocol versione 4rev1 (IMAP4rev1) permette un client per accedere e manipolare i messaggi di posta elettronica su un server.