Gestire i filtri di Gmail

Questo documento spiega come utilizzare i filtri nell'API Gmail.

Puoi utilizzare la settings.filters risorsa per configurare regole di filtro avanzate per un account. I filtri possono aggiungere o rimuovere automaticamente le etichette o inoltrare le email agli alias verificati in base agli attributi o ai contenuti del messaggio in arrivo.

Per informazioni su come creare, elencare, recuperare, o eliminare i filtri di Gmail, consulta la settings.filters risorsa.

Criteri di corrispondenza

Filtra i messaggi in base a proprietà come mittente, oggetto, data, dimensione e contenuti del messaggio. I filtri si applicano solo a messaggi specifici e non all'intero thread di email. Qualsiasi query che utilizza la sintassi di ricerca avanzata di Gmail può essere utilizzata anche in un filtro. Ad esempio, i pattern di filtro comuni includono:

Filtro Corrisponde a
criteria.from='sender@example.com' Email da sender@example.com
criteria.size=10485760
criteria.sizeComparison='larger'
Email di dimensioni maggiori di 10 MB
criteria.hasAttachment=true Email con allegato
criteria.subject='[People with Pets]' Email con [People with Pets] nell'oggetto
criteria.query='"my important project"' Email contenenti my important project
criteria.negatedQuery='"secret knock"' Email che non contengono secret knock

Se in un filtro sono presenti più criteri, un messaggio deve soddisfarli tutti per poter applicare il filtro.

Azioni

Applica un Action ai messaggi che corrispondono ai criteri di filtro. Con un Action, puoi inoltrare i messaggi a un indirizzo email verificato oppure aggiungere e rimuovere le etichette.

Aggiungi o rimuovi le etichette per modificare la disposizione dell'email. Ad esempio, alcune azioni comuni includono:

Azione Effetto
action.removeLabelIds=['INBOX'] Archivia l'email (salta la posta in arrivo)
action.removeLabelIds=['UNREAD'] Segna come letto
action.removeLabelIds=['SPAM'] Non contrassegnare mai come spam
action.removeLabelIds=['IMPORTANT'] Non contrassegnare mai come importante
action.addLabelIds=['IMPORTANT'] Contrassegna come importante
action.addLabelIds=['TRASH'] Elimina l'email
action.addLabelIds=['STARRED'] Contrassegna come speciale
action.addLabelIds=['<user label id>'] Contrassegna l'email con un'etichetta definita dall'utente. È consentita una sola etichetta definita dall'utente per filtro.

Esempi di codice

I seguenti esempi di codice mostrano come etichettare e archiviare i messaggi di una mailing list:

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