Segna Gmail come letto durante l'archiviazione dalla notifica


10

La versione più recente dell'app Gmail è la grande funzionalità in cui è possibile scegliere tra l'archiviazione o la risposta alle e-mail direttamente dalla notifica.

Il mio problema è che, se lo archivi dalla notifica, rimane non letto (invece di essere contrassegnato come letto). Esiste un modo per aggirare questo?

Vorrei che tutte le e-mail archiviate direttamente dalla notifica fossero automaticamente contrassegnate come lette.


1
Non credo che sia attualmente possibile. L'unica azione in cui è possibile modificarlo è eliminare anziché archiviare.
Ale

@AlEverett Speravo che ci potesse essere un modo per farlo con un'app alternativa, o almeno uno script di Google. = /
Malabarba

Risposte:


5

Hai detto Google Script?

Contrassegnare Gmail come letto con Apps Script

L'idea alla base di questo script è di contrassegnare come letto qualsiasi messaggio che non si trova nella Posta in arrivo (ovvero è stato archiviato).

  1. Vai a script.google.com per avviare uno script.
  2. Scegli di creare uno script per Gmail nel piccolo popup.
  3. Elimina tutto il codice di esempio che ti dà.
  4. Sostituiscilo con questo (scritto usando il riferimento API ):

    funzione markArchivedAsRead () {
       var thread = GmailApp.search ('label: unread -label: inbox');
       GmailApp.markThreadsRead (fili);
     };
  5. Salvare il progetto con File> Salva.

  6. Aggiungi una nuova versione usando File> Gestisci versioni e inserisci "versione iniziale", quindi inviala.
  7. Esegui un test utilizzando Esegui> markArchivedAsRead e assicurati di autorizzare l'app quando richiesto.
  8. Aggiungi un nuovo trigger usando Risorsa> Trigger del progetto corrente e scegli di eseguire la funzione sopra ogni minuto.
  9. Salva di nuovo lo script ed esci.

Non so che è necessario eseguirlo ogni minuto , ma finché lo esegui regolarmente.

Questa non è una risposta diretta al tuo problema e se hai motivi per avere messaggi non letti che non sono nella tua posta in arrivo, questo non funzionerà per te.


Ho alcuni filtri che potrebbero archiviare direttamente le e-mail non lette e vorrei mantenerle non lette, ma è davvero un buon inizio. Potrei avere un secondo script che contrassegna con un'etichetta specifica i thread non letti nella mia posta in arrivo. E quindi questo primo script avrebbe contrassegnato solo i messaggi archiviati come letti con questa etichetta (anziché tutti i messaggi archiviati).
Malabarba,

2
Anche questo ha un leggero bug. Se archivi un messaggio e arriva un nuovo messaggio sullo stesso thread prima che lo script abbia la possibilità di essere eseguito, entrambi verranno contrassegnati come letti quando lo script viene eseguito. Questo perché GmailApp.search restituisce interi thread e non importa se uno dei messaggi nel thread era nella posta in arrivo.
Malabarba,

3

Sono riuscito a farlo funzionare con il seguente Google Script .
È quasi uguale alla risposta di @AlEverett, ma non segna mai come messaggi letti che hanno saltato completamente la posta in arrivo (da un filtro o qualcosa del genere).

Sfortunatamente, non funzionerà per te se tendi i messaggi di archivio molto rapidamente (meno di 30 secondi in media).

/** Mark as read archived threads which were previously in the inbox (determined by the label "i"). **/
function cleanAndroidArchived(){
  markArchivedAsRead();
  labelInboxAsI();
}

function markArchivedAsRead() {
  var threads = GmailApp.search('in:unread label:i -label:inbox');
  var label = GmailApp.createLabel("i");
  label.removeFromThreads(threads);
  GmailApp.markThreadsRead(threads);
};

function labelInboxAsI() {
  var threads = GmailApp.search('in:unread label:inbox');
  var label = GmailApp.createLabel("i");
  label.addToThreads(threads);
};

2

Credo di aver risolto il problema con il caso di @ BruceConnor, dovendo attendere l'esecuzione dello script prima che funzioni.

  1. Ho creato un nuovo filtro che cerca qualsiasi cosa nella posta in arrivo
  2. assegna l'etichetta "i" (creata dalla sua versione)

Gmail si lamenta che il filtro non corrisponderà mai a nulla, ma in questo caso corrisponde a tutti i messaggi in arrivo che rimangono nella posta in arrivo.

Il risultato è che tutti i nuovi messaggi in arrivo vengono automaticamente "memorizzati" da questo tag, quindi quando si preme l'archivio lo script può confrontare l'elenco di posta in arrivo con l'etichetta "i" e sapere quali sono stati appena archiviati, quindi contrassegnare solo quelli come " leggere". Non è necessario attendere l'archiviazione, poiché tutti i messaggi sono assegnati nella coda "i" dell'archivio.

Bonus: ho anche impostato la nuova etichetta "i" su "Nascondi nella lista dei messaggi" e "Nascondi nella lista delle etichette", in modo che non si presenti mai. (Fai clic sulla piccola freccia accanto alla nuova etichetta "i" e scegli queste opzioni.)


1

La risposta di @ al-e funziona, ma ha un piccolo bug menzionato nei commenti. Ho realizzato una versione diversa dello script che risolve questo errore e lo uso con successo da alcuni anni. Ecco lo script che sto usando:

function markArchivedAsRead() {
  var threads = GmailApp.search('label:unread -label:inbox');
  for (var i=0; i<threads.length; i++)
  {
    var messages = threads[i].getMessages();
    var markUnread = 1;
    for (var j=0; j<messages.length; j++)
    {
      if (messages[j].isInInbox())
        markUnread = 0;
    }
    if (markUnread)
      threads[i].markRead();
  }
};
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.