128 votes

Comment créer un filtre Gmail recherchant uniquement le texte au début de la ligne d'objet ?

Nous recevons régulièrement des messages de construction automatisés des serveurs de construction Jenkins au travail.

Ce serait bien de les retrouver dans une étiquette, sans passer par la boîte de réception.

L'utilisation d'un filtre est bien sûr le bon choix.

L'identifiant souhaité est la chaîne de caractères [RELEASE] au début de la ligne d'objet.

Si vous tentez de spécifier l'une des regex suivantes, les courriers électroniques contenant la chaîne de caractères release en tout cas n'importe où dans la ligne d'objet pour qu'il y ait correspondance :

\[RELEASE\]*
^\[RELEASE\]
^\[RELEASE\]*
^\[RELEASE\].*

D'après ce que j'ai lu par la suite, Gmail n'a pas de support standard pour les regex, et d'après l'expérimentation, il semble, comme pour google search, que les caractères spéciaux sont simplement ignorés.

Je suis donc à la recherche d'un paramètre de recherche qui peut être utilisé, peut-être quelque chose comme atstart:mystring en accord avec leur has: , in: les notations.

Existe-t-il un moyen de forcer la correspondance uniquement si elle se produit en début de ligne, et uniquement dans le cas où des crochets sont inclus ?

Sincères remerciements.

0 votes

Il ne faut pas ^\[RELEASE\].* fait l'affaire ou est-ce que je comprends mal ce que vous voulez faire ?

0 votes

Non, quel que soit l'échappement, le format regex ne fonctionne pas. D'après ce que j'ai lu, gmail n'a pas de support standard pour les regex, et d'après l'expérimentation, il semble que, comme avec google search, les caractères spéciaux sont simplement ignorés. Je suis à la recherche d'un drapeau "secret" ou autre qui peut être utilisé' peut-être quelque chose comme atstart:mystring en accord avec leur has: , in: les notations. Je vais ajouter cette info dans mon post pour plus de clarté, merci quand même.

157voto

mr.spuratic Points 2205

Regex n'est pas sur la liste des fonctions de recherche et il était sur (plus ou moins, comme Meilleure fonctionnalité de recherche de messages (par exemple, recherche par caractères génériques et par mots partiels). ) la liste des produits pré-commercialisés demandes de fonctionnalités La réponse est donc "vous ne pouvez pas faire cela via l'interface web de Gmail" :-(

Il n'y a pas de Laboratoires les fonctions qui offrent cela. Les filtres SIEVE seraient un autre moyen de le faire, cela aussi n'était pas supporté il semble qu'il n'y ait plus de déclaration définitive sur la prise en charge de SIEVE dans l'aide de Gmail.

Mis à jour pour la rotation des liens La liste pré-établie des demandes de fonctionnalités a été, euh, mise en boîte, l'original est sur archive.org daté de 2012, maintenant vous obtenez juste redirigé vers une page simplifiée vous expliquant comment donner votre avis. Manque de soutien de SIEVE était couvert par la réponse 78761 Gmail prend-il en charge toutes les fonctionnalités IMAP ? depuis un certain temps en 2015 cette réponse redirige silencieusement vers la réponse sur la configuration du client IMAP, archive.org a une copie datant de 2014.

Avec la facilité de recherche actuelle, les parenthèses de toute forme () {} [] sont utilisés pour le regroupement, ils n'ont aucun effet observable s'il n'y a qu'un seul terme à l'intérieur. Utilisation de (aaa|bbb) y [aaa|bbb] sont équivalents et trouveront tous deux des mots aaa o bbb . La plupart des autres caractères de ponctuation, y compris \ sont traités comme un espace ou un séparateur de mots, + - : y " ont cependant une signification particulière, voir le aide .

Depuis 2016, seul le formulaire " {term1 term2} "est documenté pour cela, et est équivalent à la recherche " term1 OR term2 ".

Vous peut effectuer des recherches regex sur votre boîte aux lettres (dans certaines limites) de manière programmatique via Google docs : http://www.labnol.org/internet/advanced-gmail-search/21623/ a une source montrant comment le faire (copier le document, puis Tools > Script Editor pour obtenir la source complète).

Vous pouvez également le faire via IMAP comme décrit ici : Recherche IMAP en Python pour un sujet partiel et script quelque chose pour déplacer les messages dans un autre dossier. Le verbe IMAP SEARCH ne prend en charge que les sous-chaînes, pas les regex (la recherche Gmail est en outre limitée aux mots complets, pas aux sous-chaînes), un traitement supplémentaire des correspondances pour appliquer une regex serait nécessaire.

Pour être complet, une dernière solution de contournement : Gmail prend en charge plus l'adressage si vous pouvez changer l'adresse de destination en youraddress+jenkinsrelease@gmail.com il sera toujours envoyé dans votre boîte aux lettres, où vous pourrez le filtrer par adresse de destinataire. Veillez à filtrer en utilisant l'adresse électronique complète to:youraddress+jenkinsrelease@gmail.com . Bien entendu, cela revient plus ou moins à créer une adresse Gmail dédiée à cette fin :-)

0 votes

Existe-t-il un caractère d'échappement pour rechercher les parenthèses ou la ponctuation ?

0 votes

@Aron Je ne le crois pas. Bien que certaines ponctuations fassent l'objet d'un traitement spécial (lié au code, comme le c++ ), il est préférable de considérer que la recherche ne fonctionne que sur les mots pré-indexés.

0 votes

Je pense que vous pouvez utiliser le guillemet double " pour échapper aux parenthèses. Je l'utilise dans mes filtres et il semble que cela fonctionne. Si j'utilise subject: {[term1] (part of term2} Je trouve tous les messages contenant à la fois terme1 y partie du terme2 dans le sujet. Mais avec la forme subject:{"[term1] (part of term2"} Je trouve tous les messages dont le sujet commence exactement par [terme1] (partie du terme2)

3voto

jlo Points 127

Utilisation de Google Apps script Vous pouvez utiliser cette fonction pour filtrer les messages électroniques en fonction d'une expression rationnelle donnée :

function processInboxEmailSubjects() {
  var threads = GmailApp.getInboxThreads();
  for (var i = 0; i < threads.length; i++) {
    var subject = threads[i].getFirstMessageSubject();
    const regex = /^\[RELEASE\]/; //change this to whatever regex you want, this one should cover OP's scenario
    let isAtLeast40 = regex.test(subject)
    if (isAtLeast40) {
      Logger.log(subject);

      // Now do what you want to do with the email thread. For example, skip inbox and add an already existing label, like so:
      threads[i].moveToArchive().addLabel("customLabel")
    }
  }
}

Pour autant que je sache, il n'y a malheureusement pas de moyen de déclencher cela à chaque nouvel e-mail entrant, vous devez donc créer un déclencheur temporel comme ceci (n'hésitez pas à le changer pour l'intervalle qui vous semble le plus approprié) :

function createTrigger(){ //you only need to run this once, then the trigger executes the function every hour in perpetuity
  ScriptApp.newTrigger('processInboxEmailSubjects').timeBased().everyHours(1).create();
}

1voto

stock Points 19

La seule option que j'ai trouvée pour faire cela est de trouver une formulation exacte et de la placer sous l'option "A les mots". Ce n'est pas la meilleure option, mais elle fonctionne.

-10voto

mrfitzy Points 1

Je me demandais comment faire moi-même ; il semble que Gmail ait depuis silencieusement implémenté cette fonctionnalité. J'ai créé le filtre suivant :

Matches: subject:([test])
Do this: Skip Inbox

Et puis j'ai envoyé un message avec le sujet

[test] foo

Et le message a été archivé ! Il semble donc que tout ce qui est nécessaire est de créer un filtre pour le préfixe du sujet que vous souhaitez traiter.

9 votes

Notez que si vous envoyez un message dont l'objet est "test foo", votre filtre l'attrapera également. "[test]" ne recherche réellement que "test" =)

34 votes

Voici un conseil : lorsque vous voulez tester une idée, essayez de trouver des moyens de la réfuter. Dans votre cas, vous avez écrit un filtre pour capturer les crochets, et votre test s'attendait à ce que le filtre fonctionne. Vous devriez le tester en vous attendant à ce qu'il échoue, comme @DanielGill l'a fait remarquer :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X