Gérer les filtres Gmail

Ce document explique comment utiliser des filtres dans l'API Gmail.

Vous pouvez utiliser la ressource settings.filters pour configurer des règles de filtrage avancées pour un compte. Les filtres peuvent ajouter ou supprimer automatiquement des libellés, ou transférer des e-mails vers des alias validés en fonction des attributs ou du contenu du message entrant.

Pour savoir comment créer, lister, obtenir ou supprimer des filtres Gmail, consultez la ressource settings.filters.

Critères de correspondance

Filtrer les messages par propriétés telles que l'expéditeur, l'objet, la date, la taille et le contenu du message. Les filtres ne s'appliquent qu'à des messages spécifiques et non à l'intégralité du fil de discussion. Toute requête utilisant la syntaxe de recherche avancée de Gmail peut également être utilisée dans un filtre. Par exemple, voici quelques modèles de filtres courants :

Filtre Correspond à
criteria.from='sender@example.com' E-mails de sender@example.com
criteria.size=10485760
criteria.sizeComparison='larger'
E-mails de plus de 10 Mo
criteria.hasAttachment=true E-mails avec une pièce jointe
criteria.subject='[People with Pets]' E-mails dont l'objet contient [People with Pets]
criteria.query='"my important project"' E-mails contenant my important project
criteria.negatedQuery='"secret knock"' E-mails ne contenant pas secret knock

Si un filtre comporte plusieurs critères, un message doit tous les remplir pour que le filtre s'applique.

Actions

Appliquez un Action aux messages correspondant aux critères de filtrage. Avec un Action, vous pouvez transférer des messages vers une adresse e-mail validée, ou ajouter et supprimer des libellés.

Ajoutez ou supprimez des libellés pour modifier l'état de l'e-mail. Par exemple, voici quelques actions courantes :

Action Effet
action.removeLabelIds=['INBOX'] Archiver l'e-mail (ne pas afficher dans la boîte de réception)
action.removeLabelIds=['UNREAD'] Marquer comme lu
action.removeLabelIds=['SPAM'] Ne jamais marquer comme spam
action.removeLabelIds=['IMPORTANT'] Ne jamais marquer comme important
action.addLabelIds=['IMPORTANT'] Marquer comme important
action.addLabelIds=['TRASH'] Supprimer l'e-mail
action.addLabelIds=['STARRED'] Marquer comme favori
action.addLabelIds=['<user label id>'] Ajoutez un libellé défini par l'utilisateur à l'e-mail. Un seul libellé défini par l'utilisateur est autorisé par filtre.

Exemples de code

Les exemples de code suivants montrent comment libeller et archiver des messages provenant d'une liste de diffusion :

Java

gmail/snippets/src/main/java/CreateFilter.java
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.GmailScopes;
import com.google.api.services.gmail.model.Filter;
import com.google.api.services.gmail.model.FilterAction;
import com.google.api.services.gmail.model.FilterCriteria;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;

/* Class to demonstrate the use of Gmail Create Filter API */
public class CreateFilter {
  /**
   * Create a new filter.
   *
   * @param labelId - ID of the user label to add
   * @return the created filter id, {@code null} otherwise.
   * @throws IOException - if service account credentials file not found.
   */
  public static String createNewFilter(String labelId) throws IOException {
        /* Load pre-authorized user credentials from the environment.
           TODO(developer) - See https://developers.google.com/identity for
            guides on implementing OAuth2 for your application. */
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(GmailScopes.GMAIL_SETTINGS_BASIC,
            GmailScopes.GMAIL_LABELS);
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials);

    // Create the gmail API client
    Gmail service = new Gmail.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Gmail samples")
        .build();

    try {
      // Filter the mail from sender and archive them(skip the inbox)
      Filter filter = new Filter()
          .setCriteria(new FilterCriteria()
              .setFrom("gduser2@workspacesamples.dev"))
          .setAction(new FilterAction()
              .setAddLabelIds(Arrays.asList(labelId))
              .setRemoveLabelIds(Arrays.asList("INBOX")));

      Filter result = service.users().settings().filters().create("me", filter).execute();
      // Prints the new created filter ID
      System.out.println("Created filter " + result.getId());
      return result.getId();
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      GoogleJsonError error = e.getDetails();
      if (error.getCode() == 403) {
        System.err.println("Unable to create filter: " + e.getDetails());
      } else {
        throw e;
      }
    }
    return null;
  }
}

Python

gmail/snippet/settings snippets/create_filter.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def create_filter():
  """Create a filter.
  Returns: Draft object, including filter id.

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create gmail api client
    service = build("gmail", "v1", credentials=creds)

    label_name = "IMPORTANT"
    filter_content = {
        "criteria": {"from": "gsuder1@workspacesamples.dev"},
        "action": {
            "addLabelIds": [label_name],
            "removeLabelIds": ["INBOX"],
        },
    }

    # pylint: disable=E1101
    result = (
        service.users()
        .settings()
        .filters()
        .create(userId="me", body=filter_content)
        .execute()
    )
    print(f'Created filter with id: {result.get("id")}')

  except HttpError as error:
    print(f"An error occurred: {error}")
    result = None

  return result.get("id")


if __name__ == "__main__":
  create_filter()