Administra los filtros de Gmail

En este documento, se explica cómo usar filtros en la API de Gmail.

Puedes usar el recurso settings.filters para configurar reglas de filtrado avanzadas para una cuenta. Los filtros pueden agregar o quitar etiquetas automáticamente, o bien reenviar correos electrónicos a alias verificados según los atributos o el contenido del mensaje entrante.

Para obtener información sobre cómo crear, listar, obtener o borrar filtros de Gmail, consulta el recurso settings.filters.

Criterios de coincidencia

Filtrar mensajes por propiedades como el remitente, el asunto, la fecha, el tamaño y el contenido Los filtros solo se aplican a mensajes específicos y no a toda la conversación por correo electrónico. Cualquier consulta que use la sintaxis de búsqueda avanzada de Gmail también se puede usar en un filtro. Por ejemplo, algunos patrones de filtros comunes incluyen los siguientes:

Filtro Combinaciones
criteria.from='sender@example.com' Correos electrónicos de sender@example.com
criteria.size=10485760
criteria.sizeComparison='larger'
Correos electrónicos de más de 10 MB
criteria.hasAttachment=true Correos electrónicos con un archivo adjunto
criteria.subject='[People with Pets]' Correos electrónicos con [People with Pets] en el asunto
criteria.query='"my important project"' Correos electrónicos que contienen my important project
criteria.negatedQuery='"secret knock"' Correos electrónicos que no contienen secret knock

Si un filtro incluye varios criterios, un mensaje debe satisfacer todos los criterios para que se aplique el filtro.

Acciones

Aplica un Action a los mensajes que coincidan con los criterios del filtro. Con un Action, puedes reenviar mensajes a una dirección de correo electrónico verificada, o bien agregar y quitar etiquetas.

Agrega o quita etiquetas para cambiar la disposición del correo electrónico. Por ejemplo, algunas acciones comunes incluyen las siguientes:

Acción Efecto
action.removeLabelIds=['INBOX'] Archivar el correo electrónico (omitir Recibidos)
action.removeLabelIds=['UNREAD'] Marcar como leído
action.removeLabelIds=['SPAM'] Nunca marcar como spam
action.removeLabelIds=['IMPORTANT'] Nunca marcar como importante
action.addLabelIds=['IMPORTANT'] Marcar como importante
action.addLabelIds=['TRASH'] Borra el correo electrónico.
action.addLabelIds=['STARRED'] Marcar como destacado
action.addLabelIds=['<user label id>'] Etiqueta el correo con una etiqueta definida por el usuario. Solo se permite una etiqueta definida por el usuario por filtro.

Muestras de código

En los siguientes ejemplos de código, se muestra cómo etiquetar y archivar mensajes de una lista de distribución:

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()