Gestion des filtres

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

Pour en savoir plus sur la manière de créer, répertorier, get ou supprimer des filtres, consultez la documentation de référence sur les filtres.

Critères de correspondance

Vous pouvez filtrer les messages en fonction de propriétés telles que l'expéditeur, la date d'objet, la taille et le contenu. Toute requête utilisant la syntaxe de recherche avancée de Gmail peut également être utilisée dans un filtre. Voici quelques exemples de modèles de filtrage courants:

Filtre Correspond à
criteria.from='sender@example.com' Tous les e-mails envoyés par sender@example.com
criteria.size=10485760
criteria.sizeComparison='larger'
Tous les e-mails de plus de 10 Mo
criteria.hasAttachment=true Tous les e-mails avec une pièce jointe
criteria.subject='[People with Pets]' Tous les e-mails dont l'objet contient la chaîne [People with Pets]
criteria.query='"my important project"' Tous les e-mails contenant la chaîne my important project
criteria.negatedQuery='"secret knock"' Tous les adresses e-mail qui ne contiennent pas la chaîne secret knock

Si plusieurs critères sont présents dans un filtre, un message doit satisfaire tous les critères pour que le filtre s'applique.

Actions

Vous pouvez appliquer une action aux messages correspondant aux critères de filtre. Les messages peuvent être transférés vers une adresse e-mail validée, et des libellés peuvent être ajoutés ou supprimés.

Vous pouvez ajouter ou supprimer des libellés pour modifier la disposition de l'e-mail. Voici quelques exemples d'actions courantes:

Action Effet
action.removeLabelIds=['INBOX'] Archiver l'e-mail (sans passer par 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 importante
action.addLabelIds=['TRASH'] Supprimer l'e-mail
action.addLabelIds=['STARRED'] Marquer comme suivi
action.addLabelIds=['<user label id>'] Ajouter un libellé défini par l'utilisateur à l'e-mail Un seul libellé défini par l'utilisateur est autorisé par filtre.

Exemples

Voici un exemple plus complet montrant comment ajouter des libellés et archiver des messages à partir 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/extraits/paramètres/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()