Supporto IMAP per caselle di posta di gruppo

:rotating_light: Stiamo rimuovendo il supporto per IMAP in Discourse. Consulta questo post per i dettagli: IMAP support for group inboxes - #39 by martin . :rotating_light:


Siamo lieti di presentare una versione alpha del supporto IMAP per le caselle di posta dei gruppi. Questa funzionalità permette di inserire le credenziali e le impostazioni IMAP su base per gruppo, sincronizzando le caselle di posta dei gruppi con una casella di posta elettronica. :email:

:warning::warning: :warning:

Questa è una funzionalità in fase alpha e, di conseguenza, non è al 100% completa e rifinita. È molto probabile che presenti malfunzionamenti; al momento non la stiamo mantenendo né utilizzandola in produzione. Usala a tuo rischio e pericolo!

:warning: :warning: :warning:

Vantaggi

  • Il tuo gruppo può iniziare subito a utilizzare le caselle di posta di Discourse, poiché tutta la tua posta esistente verrà sincronizzata! :running_woman:
  • Il tuo gruppo può sincronizzare i messaggi tra Discourse e il tuo provider di posta elettronica, eliminando il singolo punto di guasto. Le persone possono rispondere dall’account email o direttamente da Discourse e tutto verrà sincronizzato :zap:
  • Non dovrai più impostare regole di inoltro complicate dal tuo provider di posta elettronica alla casella di posta in arrivo di Discourse. :arrow_right:
  • Le etichette della posta elettronica verranno sincronizzate con i tag di Discourse, mantenendo tutto ordinato :card_file_box:
  • Risponderai alle persone che scrivono al tuo gruppo dall’indirizzo email che hai configurato, anche se rispondi da Discourse. Niente più confusione! :relieved:

Funzionalità

  • Tutta la posta in arrivo e in uscita verrà sincronizzata tra il server IMAP e Discourse, creando gli argomenti e le risposte ai post appropriati in base alle email analizzate. Le risposte possono essere create da Discourse o dal server IMAP e tutto verrà sincronizzato!
  • Le email possono essere risposte dalla casella di posta del gruppo di Discourse OPPURE dall’account email.
  • I tag applicati all’argomento di Discourse verranno creati come etichette e applicati all’email sul server IMAP (questo dipende dal provider).
  • Le email archiviate sul server IMAP verranno archiviate nella casella di posta del gruppo.
  • Gli argomenti di messaggi privati di gruppo archiviati su Discourse verranno archiviati sul server IMAP.
  • Le email eliminate sul server IMAP elimineranno l’argomento nella casella di posta del gruppo.
  • Gli argomenti di messaggi privati di gruppo eliminati su Discourse verranno eliminati sul server IMAP.
  • Le email inviate dai gruppi con questa funzionalità abilitata avranno l’indirizzo “rispondi a” impostato sullo stesso nome utente email configurato nelle impostazioni IMAP.

Per iniziare

Prima di tutto, ci sono alcune impostazioni del sito che devi configurare prima di poter impostare questa funzionalità su un gruppo.

  • enable imap e enable smtp devono essere entrambi abilitati. IMAP viene utilizzato per la sincronizzazione con il tuo server di posta, mentre SMTP viene utilizzato per inviare email dal tuo server di posta.
  • tagging enabled e allow staff to tag pms - Devono essere entrambi abilitati, poiché la sincronizzazione delle etichette applica i tag ai messaggi privati.
  • enable imap write - Deve essere abilitato se desideri che le modifiche apportate in Discourse si riflettano sul tuo server di posta (ad esempio tag, archiviazione e cancellazione di argomenti).
  • enable imap idle - Ci permette di ricevere aggiornamenti in tempo reale dal tuo server di posta SE il tuo server supporta IDLE. Questo accelera notevolmente il riflesso delle modifiche dal tuo provider di posta a Discourse. Dovresti attivarlo (ad esempio, Gmail lo supporta). Se vuoi tutti i dettagli tecnici, puoi leggere l’RFC per IDLE.
  • imap polling period mins - Se IDLE non è supportato, questo è il numero di minuti che attendiamo prima di controllare il server IMAP per le modifiche. È anche il tempo che attendiamo tra l’invio delle modifiche al server IMAP da Discourse se enable imap write è abilitato. Il minimo è 1 minuto.

Queste impostazioni possono essere lasciate ai valori predefiniti e modificate se riscontri problemi con la sincronizzazione:

  • imap polling old emails - Il numero massimo di email vecchie (elaborate) da aggiornare ogni volta che viene interrogata una casella IMAP (0 per tutte).
  • imap polling new emails - Il numero massimo di email nuove (non elaborate) da aggiornare ogni volta che viene interrogata una casella IMAP.
  • imap batch import email - Il numero minimo di email nuove che attivano la modalità di importazione (disabilita gli avvisi dei post).

Se desideri che le etichette/tag vengano sincronizzate con il server IMAP, devi abilitare le impostazioni del sito tagging enabled e allow staff to tag pms.

Successivamente, devi accedere al gruppo che desideri sincronizzare con il tuo server IMAP e compilare le impostazioni.

Queste impostazioni sono specifiche del provider; consulta i dettagli qui sotto. Una volta inserite le impostazioni e le credenziali, fai clic su “Salva modifiche” e verificheremo le credenziali contro i server del provider IMAP. In caso di successo, l’elenco delle caselle di posta verrà popolato e dovrai scegliere quella che desideri sincronizzare (le istruzioni sono anch’esse specifiche del provider):

Se la validazione delle credenziali non va a buon fine, verrà visualizzato un messaggio di errore nella pagina. Per essere chiari, il server SMTP inserito verrà utilizzato per inviare email a nome dell’account inserito sotto nome utente e password, non del server SMTP principale di Discourse configurato per le email in blocco.

Infine, all’interno del tuo file app.yml dovrai aggiungere DISCOURSE_ENABLE_EMAIL_SYNC_DEMON: true nella sezione env ed eseguire ./launcher rebuild. Questo attiverà il worker in background per avviarsi e iniziare a sincronizzare le email! :fireworks:

Informazioni specifiche per il provider

Gmail

  • :warning: Devi generare una password per l’applicazione, altrimenti devi attivare l’“Accesso a app meno sicure”, che Google sta comunque eliminando a breve. Utilizza questa password al posto della password del tuo account Gmail nelle impostazioni IMAP. Consulta Sign in with app passwords - Gmail Help per ulteriori dettagli. :warning:
  • Assicurati di utilizzare queste impostazioni per SMTP e IMAP:
  • Si consiglia vivamente (e presto sarà una funzionalità dell’interfaccia) di selezionare solo la casella di posta “[Gmail]/All Mail” per la sincronizzazione.
  • Non eliminiamo immediatamente le email su Gmail, ma le spostiamo solo nel cestino quando l’argomento viene eliminato in Discourse. La funzionalità di eliminazione “30 giorni” all’interno di Gmail prenderà il sopravvento da lì.
  • I tag applicati agli argomenti di Discourse creeranno Etichette su Gmail e le applicheranno ai thread di posta elettronica. Le etichette su Gmail sono anche caselle di posta IMAP!

Limitazioni

Questa è una funzionalità in fase alpha e, di conseguenza, non è al 100% completa e rifinita. Pertanto, al momento si applicano le seguenti limitazioni:

  • Attualmente solo Gmail è supportato come provider IMAP. Abbiamo alcune funzionalità IMAP generiche, ma non è garantito che funzionino. Outlook Online è il nostro prossimo grande obiettivo per il supporto.
  • Il ripristino delle email eliminate dal Cestino di Gmail e il riflesso dello stato in Discourse è attualmente instabile.
  • :warning: Cambiare la casella di posta sincronizzata dopo che le email sono già state sincronizzate non è consigliato e può causare molti problemi strani. :warning:
  • È possibile sincronizzare solo una casella di posta per gruppo.
  • La comunicazione da gruppo a gruppo è un territorio inesplorato e non funzionerà bene (ad esempio, inviare email a team@yoursite.com da support@yoursite.com se ciascuna di queste email è configurata per un gruppo diverso).

Potrebbero esserci anche altri piccoli problemi e imperfezioni, dato che questa è una funzionalità alpha.

Feedback e Roadmap

Apprezziamo molto il feedback di chiunque stia utilizzando questa funzionalità con Gmail. Sarò io a lavorare per risolvere eventuali bug o problemi. Il debug è un po’ complicato al momento, ma ci sto lavorando!

Le prossime cose su cui lavorerò:

  • Migliorare il debug per rendere più facile visualizzare i log IMAP e capire cosa va storto.
  • Migliorare l’interfaccia delle email del gruppo per limitare le caselle di posta selezionabili da Gmail e per scoraggiare/non permettere la modifica delle caselle di posta.
  • Validazione per impedire l’uso delle stesse credenziali IMAP per più gruppi.
  • Possibili miglioramenti su come vengono memorizzate le impostazioni IMAP del gruppo e un’esperienza utente migliore per la validazione delle credenziali.
  • Supporto per Outlook.

Attualmente, mentre risolviamo i problemi, questa funzionalità non è disponibile per i nostri clienti in hosting.

Ringraziamenti speciali :pray:

Sia @dan che @j.jaffeux sono i principali contributori di questa enorme funzionalità, su cui è stato lavorato per tanto tempo. Senza il loro straordinario lavoro non sarei stato in grado di portare la funzionalità a questo punto e di fare questo annuncio :tada:.

41 Mi Piace

Questa è allo stesso tempo una notizia fantastica e una notizia terribile. Lasciate che vi spieghi. Innanzitutto, è una grande notizia vedere l’integrazione IMAP con i gruppi Discourse, poiché offre numerose soluzioni utili per l’identità dei gruppi (utilizzando l’indirizzo originale corretto), facilita l’uso dello stesso account IMAP da parte di più utenti (non ben supportato nativamente, ad esempio, nessun stato di lettura condiviso) e apre la strada alle caselle di posta ActivityPub… Ma è una notizia terribile perché la sua implementazione favorisce i giganti della posta elettronica che hanno trasformato un servizio federato in un sistema largamente centralizzato. Comprendo l’attrazione di lavorare con provider su larga scala, ma spero che lo standard IMAP sia preferito rispetto alle estensioni specifiche del provider, in modo che qualsiasi provider di posta elettronica sia supportato non appena questa funzione raggiungerà lo stato di beta.

Bravi per aver reso possibile tutto ciò.

10 Mi Piace

C’è un motivo importante per cui questa funzionalità è considerata “alpha” :slight_smile:

Il problema con IMAP, da quanto ho osservato da bordo campo, è la quantità di “interpretazione aperta” con cui dobbiamo fare i conti.

Vogliamo certamente far funzionare questa funzionalità con più provider; la nostra priorità interna è il grande ecosistema Google, perché la realtà è che usiamo Google su Discourse, quindi abbiamo voluto risolvere prima il nostro problema.

Le PR per migliorare il funzionamento con altri provider sono certamente benvenute; in assenza di queste, col passare del tempo e osservando un maggiore interesse verso l’uso con altri provider, costruiremo il supporto necessario.

17 Mi Piace

Questa è una critica fondata; come ha detto @sam, ci siamo concentrati inizialmente su Gmail perché è quello che utilizziamo noi, quindi è il più rilevante per noi. Tuttavia, credo che il nostro provider “generico” di base, sebbene certamente non sia conforme al 100% alla RFC e non sia completo di tutte le funzionalità, segua il protocollo IMAP in modo piuttosto rigoroso… vedi https://github.com/discourse/discourse/blob/master/lib/imap/providers/generic.rb. Le uniche aggiunte che ritengo necessarie sono la gestione speciale di Archiviazione ed Eliminazione. Attualmente, l’eliminazione viene semplicemente contrassegnata con \Deleted e viene inviato il comando EXPUNGE, ma so che alcuni client di posta permettono di scegliere se procedere in questo modo o spostare prima i messaggi in una cartella cestino e poi eseguire EXPUNGE, ecc. Non sono sicuro di quale sia lo standard per l’archiviazione in IMAP. Abbiamo una classe specifica per il provider Gmail che sovrascrive alcuni di questi metodi generici.

Se hai suggerimenti su altri server o provider IMAP “generici” su cui posso testare, sarebbe di grande aiuto, dato che Gmail ha la sua gestione particolare e specifica (“special snowflake”) delle cose e le sue estensioni IMAP di Gmail.

Inoltre, come ha detto Sam, sono benvenute eventuali pull request per miglioramenti; altrimenti, ci adatteremo alla domanda, e prevedo che il prossimo grande caso d’uso per le organizzazioni che desiderano questo tipo di funzionalità sarà Outlook (Outlook ha le sue regole particolari e specifiche… ad esempio, l’archiviazione è una cartella o una casella di posta e non supporta le etichette).

12 Mi Piace

Sembra molto interessante. La mia azienda ha recentemente migrato dal nostro server di posta interno a G-Suite e questa integrazione ci faciliterà molto la risposta alle richieste dei clienti e la gestione dei nostri tracker di avanzamento. Ho però una domanda per @martin. Non mi è chiaro se utilizzerà lo SMTP di Gmail per rispondere ai messaggi ricevuti nella casella di posta di gruppo o se userà lo SMTP configurato per inviare email a nome di Discourse. Vedo che il plugin menziona anche lo SMTP di Gmail, ma volevo comunque chiarimenti a riguardo.

6 Mi Piace

Il server SMTP di Gmail viene utilizzato per inviare le risposte, poiché stai inviando le risposte a nome dell’account email utilizzato per la sincronizzazione IMAP! Aggiungerò una nota a tal proposito nell’OP per chiarire.

7 Mi Piace

È davvero geniale. Posso pensare a così tanti casi d’uso per questo. Complimenti @martin @dan @j.jaffeux :raising_hands:

9 Mi Piace

Aggiornamento rapido. Ho unito queste due PR la settimana scorsa. Innanzitutto, la correzione affinché il tagging non debba essere abilitato per far funzionare l’archiviazione e l’eliminazione:

In secondo luogo, ora scrivo tutti i log IMAP nel database per facilitarne l’ispezione. Un job verrà eseguito quotidianamente per eliminare i log con un’età superiore a 5 giorni:

11 Mi Piace

È super carino! Grazie.

Devo dire che ho dovuto creare una password applicativa nel mio account Google per far sì che Discourse accettasse il mio nome utente e la mia password.

5 Mi Piace

Stai utilizzando l’autenticazione a due fattori sul lato Google? Se sì, questa è una pratica standard.

2 Mi Piace

Sì. Credo che fosse necessario per creare la password dell’app (anche se non ne sono certo al 100%).

1 Mi Piace

Questo è già stato indicato nell’OP :wink: Altrimenti dovresti compiere sforzi incredibili per far accettare all’account Gmail le “app meno sicure”. Prima o poi dovremo supportare OAuth per Google, poiché sembra che sia questa la direzione verso cui si sta andando.

4 Mi Piace

Ops! Ho mai detto che le mie capacità di comprensione del testo sono pessime? :woozy_face:

5 Mi Piace

Va bene! È un punto importante, quindi l’ho spostato in cima all’elenco di Gmail e ho aggiunto alcuni indicatori di avviso. Grazie per aver cercato di avvisare gli altri per risparmiare loro problemi :slight_smile:

6 Mi Piace

Sto cercando di capire perché non riesco a sincronizzare le email con un server IMAP Dovecot (sfortunatamente senza esperienza in Ruby o Rails).

Leggendo i log di sincronizzazione IMAP, il daemon di importazione rimane bloccato in un ciclo:

UIDVALIDITY = 1612565899 non corrisponde al valore atteso 0, invalidando la cache IMAP e risincronizzando le email per la casella INBOX

Quindi mi chiedo se @group.imap_uid_validity non dovrebbe essere aggiornato in questo caso:

Dopo un aggiornamento manuale di questo valore, il daemon di importazione rimane bloccato in un altro ciclo.

Dovecot non supporta 'LABELS' in

generando un Net::IMAP::BadResponseError che, purtroppo, non viene registrato nei log.

Ora mi chiedo:

  • se il supporto di Dovecot per i flag personalizzati sia sufficiente per una sincronizzazione bidirezionale con Discourse
  • come rilevare Dovecot in lib/imap/providers/detector.rb
  • come emulare la funzionalità delle etichette in un provider Dovecot

5 Mi Piace

La sincronizzazione IMAP per le caselle di posta di gruppo è ancora una funzionalità in fase iniziale che attualmente supporta solo Gmail. In teoria, potresti scrivere un provider dovecot, ma alcune settimane fa ho notato che ci sono alcune parti nel codice principale che utilizzano funzionalità specifiche di Gmail e che devono essere spostate nel codice specifico del provider. Mi dispiace, quindi, ma potresti voler aspettare che sia un po’ più pronto per il lancio ufficiale.

7 Mi Piace

IIUC 'LABELS' è una funzionalità non standard di Gmail.
Vorrei comprendere la differenza tra Google IMAP e IMAP standard.

Questo è il mio riassunto finora:

IMAP standard Google IMAP
Le email archiviate vivono in sottocartelle tutte le email vivono in una singola cartella
le email archiviate mancano dell’etichetta “\INBOX”
I flag personalizzati sono memorizzati insieme ai flag di sistema memorizza i flag personalizzati come etichette

Sarebbe sufficiente:

  • emulare le etichette in IMAP standard dividendo i flag in flag di sistema e flag personalizzati
  • gestire email_is_archived a livello del provider (ad esempio, aggiungere e verificare un flag “archived”)
  • per far funzionare la sincronizzazione IMAP standard?

Questo interesserebbe queste righe:

Questa riga mi sembra strana:

Qualsiasi flag di sistema verrà sovrascritto dai tag di Discourse.
Questo gestisce correttamente tutti i flag IMAP (`\Answered, \Deleted, \Draft, \Flagged, \Recent e \Seen / $Forwarded, $MDNSent, $SubmitPending e $Submitted)?

2 Mi Piace

Sto tornando su questo argomento dopo un po’ di tempo.

Non sono riuscito a capire come far funzionare correttamente l’intestazione reply-to. Posso configurare un gruppo per sincronizzarlo con un account Gmail specifico, ma quando provo a rispondere via email, l’indirizzo reply-to viene impostato sull’email di notifica configurata in Discourse e non sull’indirizzo IMAP.

C’è qualcosa che mi sfugge?

1 Mi Piace

L’ho appena testato con il provider di posta GoDaddy, ma senza successo. Con Gmail funziona benissimo, ma purtroppo vogliamo usare il nostro dominio. Ci sono aggiornamenti per renderlo pronto all’uso?

1 Mi Piace

Puoi utilizzare il tuo dominio con Gmail (a pagamento), per quanto ne so.

1 Mi Piace