Marquer Gmail comme lu lors de l'archivage à partir de la notification

10

La version la plus récente de l'application Gmail est la grande fonctionnalité où vous pouvez choisir entre archiver ou répondre aux e-mails directement à partir de la notification.

Mon problème est que, si vous l'archivez à partir de la notification, il reste non lu (au lieu d'être marqué comme lu). Est-il possible de contourner cela?

Je souhaite que tous les e-mails archivés directement à partir de la notification soient automatiquement marqués comme lus.

Malabarba
la source
1
Je ne pense pas que ce soit actuellement possible. La seule action que vous pouvez modifier est de supprimer au lieu d'archiver.
ale
@AlEverett J'espérais qu'il pourrait y avoir moyen de le faire avec une application alternative, ou au moins un script google. = /
Malabarba

Réponses:

5

Avez-vous dit Google Script?

Marquage de Gmail lu avec Apps Script

L'idée derrière ce script est de marquer comme lu tout message qui n'est pas dans la boîte de réception (c'est-à-dire qui a été archivé).

  1. Rendez-vous sur script.google.com pour démarrer un script.
  2. Choisissez de créer un script pour Gmail dans la petite fenêtre contextuelle.
  3. Supprimez tous les exemples de code qu'il vous donne.
  4. Remplacez-le par ceci (écrit en utilisant la référence API ):

    fonction markArchivedAsRead () {
       var threads = GmailApp.search ('étiquette: non lu -étiquette: boîte de réception');
       GmailApp.markThreadsRead (threads);
     };
  5. Enregistrez le projet avec Fichier> Enregistrer.

  6. Ajoutez une nouvelle version en utilisant Fichier> Gérer les versions et entrez "version initiale" puis soumettez-la.
  7. Faites un test avec Run> markArchivedAsRead et assurez-vous et autorisez l'application lorsqu'elle vous le demande.
  8. Ajoutez un nouveau déclencheur en utilisant Ressource> Déclencheurs du projet en cours et choisissez d'exécuter la fonction ci-dessus toutes les minutes.
  9. Enregistrez à nouveau le script et quittez.

Je ne sais pas qu'il est nécessaire de l'exécuter toutes les minutes , mais tant que vous l'exécutez régulièrement.

Ce n'est pas une réponse directe à votre problème, et si vous avez des raisons d'avoir des messages non lus qui ne sont pas dans votre boîte de réception, cela ne fonctionnera pas pour vous.

ale
la source
J'ai des filtres qui pourraient archiver directement les e-mails non lus, et je voudrais les garder non lus, mais c'est un très bon début. Je pourrais avoir un deuxième script qui marque avec une étiquette spécifique les fils non lus dans ma boîte de réception. Et puis ce premier script ne marquerait que les messages archivés comme lus avec cette étiquette (au lieu de tous les messages archivés).
Malabarba
2
Cela a également un léger bug. Si vous archivez un message et qu'un nouveau message arrive sur le même thread avant que le script ait une chance de s'exécuter, les deux seront marqués comme lus lorsque le script s'exécutera. C'est parce que GmailApp.search renvoie des threads entiers et ne se soucie pas si l'un des messages du thread était dans la boîte de réception.
Malabarba
3

J'ai réussi à le faire fonctionner avec le script Google suivant .
C'est presque la même chose que la réponse de @ AlEverett, mais elle ne marque jamais comme des messages lus qui ont complètement ignoré la boîte de réception (à partir d'un filtre ou quelque chose).

Malheureusement, cela ne fonctionnera pas pour vous si vous avez tendance à archiver les messages très rapidement (moins de 30 secondes en moyenne).

/** 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);
};
Malabarba
la source
2

Je crois avoir résolu le problème avec le cas de @ BruceConnor, ayant besoin d'attendre que le script s'exécute avant de pouvoir fonctionner.

  1. J'ai créé un nouveau filtre qui recherche tout dans la boîte de réception
  2. attribue l'étiquette "i" (qui est créée par sa version)

Gmail se plaint que le filtre ne correspondra à rien, mais dans ce cas, il correspond à tous les messages entrants qui restent dans la boîte de réception.

Le résultat est que tous les nouveaux messages entrants sont automatiquement "mémorisés" par cette balise, puis lorsque vous appuyez sur archiver, le script peut comparer la liste de boîte de réception avec le libellé "i" et savoir lesquels viennent d'être archivés, puis marquer uniquement ceux comme " lis". Vous n'avez pas à attendre l'archivage, car tous les messages sont affectés à la file d'attente "i" de l'archive.

Bonus: j'ai également défini le nouveau libellé "i" sur "Masquer dans la liste des messages" et "Masquer dans la liste des libellés", afin qu'il n'apparaisse jamais du tout. (Cliquez sur la petite flèche à côté de la nouvelle étiquette "i" et choisissez ces options.)

Brak
la source
1

La réponse de @ al-e fonctionne, mais elle a un petit bug mentionné dans les commentaires. J'ai créé une version différente du script qui résout ce bogue et l'utilise avec succès depuis quelques années. Voici le script que j'utilise:

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();
  }
};
Carotte
la source