11 votes

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

La version la plus récente de l'application Gmail comme la grande fonctionnalité où vous pouvez choisir entre l'archivage ou la réponse aux e-mails directement depuis la la notification.

Le problème est que, si vous l'archivez à partir de la notification, il reste non lu (au lieu d'être marqué comme lu). notification, elle reste non lue (au lieu d'être marquée comme lue). Existe-t-il un moyen de contourner ce problème ?

J'aimerais que tous les courriels qui sont archivés directement à partir de la base de données de l'Agence. notification soient automatiquement marqués comme lus.

1 votes

Je ne crois pas que cela soit possible actuellement. La seule action possible est de supprimer au lieu d'archiver.

0 votes

@AlEverett J'espérais qu'il y ait un moyen de le faire avec une application alternative, ou au moins un script google. =/

5voto

Lasse V. Karlsen Points 148037

Vous avez dit Google Script ?

Marquer Gmail lu avec Apps Script

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

  1. Tête à script.google.com pour lancer un script.

  2. Choisissez de créer un script pour Gmail dans le petit popup.

  3. Supprimez tous les exemples de code qu'il vous donne.

  4. Remplacez-le par ceci (écrit en utilisant la référence de l'API ):

    function markArchivedAsRead() {
       var threads = GmailApp.search('label:unread -label:inbox');
       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 essai en utilisant Exécuter > markArchivedAsRead et assurez-vous d'autoriser l'application lorsqu'elle vous le demande.

  8. Ajoutez un nouveau déclencheur en utilisant Ressources > Déclencheurs du projet actuel et choisissez d'exécuter la fonction ci-dessus toutes les minutes.

  9. Enregistrez à nouveau le script et quittez.

Je ne sais pas s'il est nécessaire de l'exécuter à chaque fois minute mais tant que vous le faites fonctionner 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.

0 votes

J'ai quelques filtres qui peuvent archiver directement les courriels non lus, et j'aimerais conserver ces courriels 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 de discussion non lus dans ma boîte de réception. Ensuite, ce premier script ne marquerait comme lus que les messages archivés avec ce label (au lieu de tous les messages archivés).

2 votes

Il y a également un petit problème. Si vous archivez un message et qu'un nouveau message arrive sur le même fil de discussion avant que le script n'ait eu le temps de s'exécuter, les deux messages seront marqués comme lus lorsque le script s'exécutera. En effet, GmailApp.search renvoie des fils de discussion entiers et ne se préoccupe pas de savoir si l'un des messages du fil de discussion se trouvait dans la boîte de réception.

3voto

J'ai réussi à le faire fonctionner avec les éléments suivants Google Script .
C'est à peu près la même chose que la réponse de @AlEverett, mais il ne marque jamais comme lus les messages qui ont entièrement échappé à la boîte de réception (à cause d'un filtre ou autre).

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);
};

2voto

Brak Points 21

Je pense avoir résolu le problème du cas de @BruceConnor, à savoir la nécessité d'attendre que le script s'exécute pour qu'il puisse fonctionner.

  1. J'ai créé un nouveau filtre qui recherche tout ce qui se trouve 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 jamais à 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 étiquette, puis, lorsque vous appuyez sur le bouton d'archivage, le script peut comparer la liste de la boîte de réception avec l'étiquette "i" et savoir lesquels viennent d'être archivés, puis marquer uniquement ceux-là comme "lus". Vous n'avez pas besoin d'attendre pour archiver, car tous les messages sont affectés à la file d'attente "i" de l'archive.

Bonus : j'ai également réglé la nouvelle étiquette "i" sur "Masquer dans la liste des messages" et "Masquer dans la liste des étiquettes", afin qu'elle n'apparaisse jamais. (Cliquez sur la petite flèche à côté de la nouvelle étiquette "i" et choisissez ces options).

1voto

Asinox Points 1817

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 je 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();
  }
};

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X