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

This is at the same time fantastic news and terrible news. Let me explain. First is great news to see IMAP integration with Discourse groups, as it brings a number of useful solutions to group identity (using the correct original address), to facilitate multiple users using the same IMAP account (not well supported natively, e.g. no shared reading states), and it opens the path to ActivityPub inboxes… But it’s a terrible news because its implementation favors email giants who turned a federated service into a largely centralized system. I understand the attraction to work with large scale providers, but I hope IMAP standard will be preferred over provider-specific extensions so that any email provider will be supported once this feature reaches beta state.

Kudos for making this possible.

10 Mi Piace

There is a big reason this feature is considered “alpha” :slight_smile:

The trouble with IMAP from what I have observed from the sidelines is the amount of “open to interpretation” we are stuck dealing with.

We certainly want to make this work with more providers, our internal itch favors the big Google cause the reality is that we use Google at Discourse so we wanted to solve our problem first.

PRs to make this work better with more providers are certainly welcome, in absence of them as time passes and we observe more desire to use this with other providers we shall build support.

17 Mi Piace

This is a fair criticism, like @sam said we focused on Gmail first because this is what we use so it is the most relevant for us. However I believe that our base “generic” provider, while certainly not nearly 100% compliant to the RFC and not feature complete, follows the IMAP protocol quite closely…see discourse/lib/imap/providers/generic.rb at main · discourse/discourse · GitHub. The only additions I think this will need are special handling of Archiving and Deleting. Deleting we currently just flag as \Deleted and send an EXPUNGE command, but I know certain email clients will let you choose to do this or send to a trash folder first then EXPUNGE etc. I am not sure what the Archiving standard is for IMAP. We have a specific Gmail provider class that overrides some of these generic methods.

If you have any suggestions on more “generic” IMAP servers/providers that I can test against that would be a great help, as Gmail has its own special snowflake handling of things and Gmail IMAP extensions.

Also, as Sam said, any PRs for improvement are welcome, otherwise we will cater to demand, which I am predicting will be Outlook next as another big use case for organizations wanting this kind of feature (Outlook has its own special snowflake rules…like Archive being a folder/mailbox and no label support).

12 Mi Piace

Looks very exciting, My firm recently switched from our own mailserver to G-Suite and this integration will make it much easier for us to respond to client queries and manage our progress trackers. I have one query for @martin though. It isn’t clear to me whether it would use gmail smtp to reply to messages received in group inbox or would it use the mass smtp configured to send emails on behalf of Discourse? I see that the plugin mentions gmail’s smtp as well but I still wanted clarity on this.

6 Mi Piace

Gmail’s SMTP server is used to send the replies, as you are sending the replies on behalf of the email account used for IMAP syncing! I will add a note to this effect in the OP to clarify.

7 Mi Piace

That’s actually brilliant. I can think of so many use cases for this. Kudos @martin @dan @j.jaffeux :raised_hands:

9 Mi Piace

Quick update here. I merged these two PRs last week. First, the fix so that tagging does not need to be enabled for archiving and deleting to work:

https://github.com/discourse/discourse/pull/10426

Second, I am now writing all IMAP logs to the database for easier inspection. A job will be run daily to delete logs > 5 days old:

https://github.com/discourse/discourse/pull/10435

11 Mi Piace

This is super sweet! Thanks.

I should say, I had to create an application password in my google email account for discourse to get it to accept my username/password

5 Mi Piace

Are you running 2-factor authentication on the Google end? If so, this is standard practice.

2 Mi Piace

Yes. I believe it was required in order for me to create the app password (though I don’t remember for sure)

1 Mi Piace

This is noted in the OP :wink: Otherwise you have to jump through crazy hoops to make your Gmail account accept “Less secure apps”. At some point we will need to support OAuth for Google as that looks like the way things are headed.

4 Mi Piace

Oops! Did I mention that my reading comprehension skills suck? :woozy_face:

5 Mi Piace

It’s okay! It is an important point so I moved it to the top of the Gmail list and added some warning indicators. Thank you for trying to let others know about this to save them trouble :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