Verwalten von Filtern

Mit Filtern können Sie erweiterte Filterregeln für ein Konto konfigurieren. Mit Filtern können Sie automatisch Labels hinzufügen oder entfernen oder E-Mails basierend auf den Attributen oder dem Inhalt der eingehenden Nachricht an bestätigte Aliasse weiterleiten.

Informationen zum create, Auflisten, Abrufen und Löschen von Filtern finden Sie in der Filterreferenz.

Übereinstimmungskriterien

Sie können Nachrichten nach Eigenschaften wie Absender, Betreff, Datum, Größe und Inhalt filtern. Alle Suchanfragen, die die erweiterte Suchsyntax von Gmail verwenden, können auch in einem Filter verwendet werden. Zu den gängigen Filtermustern gehören beispielsweise:

Filter Übereinstimmungen
criteria.from='sender@example.com' Alle E-Mails von sender@example.com
criteria.size=10485760
criteria.sizeComparison='larger'
Alle E-Mails, die größer als 10 MB sind
criteria.hasAttachment=true Alle E-Mails mit Anhängen
criteria.subject='[People with Pets]' Alle E-Mails mit dem String [People with Pets] im Betreff
criteria.query='"my important project"' Alle E-Mails, die den String my important project enthalten
criteria.negatedQuery='"secret knock"' Alle E-Mails, die den String secret knock nicht enthalten

Wenn ein Filter mehrere Kriterien enthält, muss eine Nachricht alle Kriterien erfüllen, damit der Filter angewendet wird.

Aktionen

Sie können eine Aktion auf Nachrichten anwenden, die den Filterkriterien entsprechen. Nachrichten können an eine bestätigte E-Mail-Adresse weitergeleitet oder Labels hinzugefügt oder entfernt werden.

Sie können Labels hinzufügen oder entfernen, um die Zuordnung der E-Mail zu ändern. Beispiele für gängige Aktionen:

Aktion Effekt
action.removeLabelIds=['INBOX'] E-Mail archivieren (Posteingang überspringen)
action.removeLabelIds=['UNREAD'] Als gelesen markieren
action.removeLabelIds=['SPAM'] Nie als Spam markieren
action.removeLabelIds=['IMPORTANT'] Nie als wichtig markieren
action.addLabelIds=['IMPORTANT'] Als wichtig markieren
action.addLabelIds=['TRASH'] E-Mail löschen
action.addLabelIds=['STARRED'] Als „Markiert“ kennzeichnen
action.addLabelIds=['<user label id>'] Taggen Sie die E-Mail mit einem benutzerdefinierten Label. Pro Filter ist nur ein benutzerdefiniertes Label zulässig.

Beispiele

Im Folgenden finden Sie ein vollständigeres Beispiel, das zeigt, wie Nachrichten aus einer Mailingliste getaggt und archiviert werden.

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