Gmail filtrelerini yönetme

Bu belgede, Gmail API'de filtrelerin nasıl kullanılacağı açıklanmaktadır.

Bir hesap için gelişmiş filtreleme kurallarını yapılandırmak üzere settings.filters kaynağını kullanabilirsiniz. Filtreler, gelen iletinin özelliklerine veya içeriğine göre etiketleri otomatik olarak ekleyebilir ya da kaldırabilir veya e-postaları doğrulanmış takma adlara yönlendirebilir.

Gmail filtrelerini oluşturma, listeleme, alma veya silme hakkında bilgi edinmek için settings.filters kaynağına bakın.

Eşleşme ölçütleri

İletileri gönderen, konu, tarih, boyut ve ileti içeriği gibi özelliklere göre filtreleyin. Filtreler yalnızca belirli iletiler için geçerlidir, e-posta ileti dizisinin tamamı için geçerli değildir. Gmail'in gelişmiş arama söz dizimini kullanan tüm sorgular filtrelerde de kullanılabilir. Örneğin, yaygın filtre kalıpları şunlardır:

Filtre Eşleşmeler
criteria.from='sender@example.com' sender@example.com tarafından gönderilen e-postalar
criteria.size=10485760
criteria.sizeComparison='larger'
10 MB'tan büyük e-postalar
criteria.hasAttachment=true Ek içeren e-postalar
criteria.subject='[People with Pets]' Konusunda [People with Pets] ifadesi bulunan e-postalar
criteria.query='"my important project"' my important project içeren e-postalar
criteria.negatedQuery='"secret knock"' secret knock değerini içermeyen e-postalar

Bir filtrede birden fazla ölçüt varsa filtrenin uygulanması için iletinin tüm ölçütleri karşılaması gerekir.

İşlemler

Filtre ölçütleriyle eşleşen iletilere Action uygulayın. Action iletileri doğrulanmış bir e-posta adresine yönlendirebilir veya etiket ekleyip kaldırabilirsiniz.

E-postanın durumunu değiştirmek için etiket ekleyin veya kaldırın. Örneğin, bazı yaygın işlemler şunlardır:

İşlem Etki
action.removeLabelIds=['INBOX'] E-postayı arşivleme (gelen kutusunu atlama)
action.removeLabelIds=['UNREAD'] Okundu olarak işaretle
action.removeLabelIds=['SPAM'] Hiçbir zaman spam olarak işaretleme
action.removeLabelIds=['IMPORTANT'] Hiçbir zaman önemli olarak işaretleme
action.addLabelIds=['IMPORTANT'] Önemli olarak işaretle
action.addLabelIds=['TRASH'] E-postayı silme
action.addLabelIds=['STARRED'] Yıldızlı olarak işaretleme
action.addLabelIds=['<user label id>'] Postayı kullanıcı tanımlı bir etiketle etiketleyin. Filtre başına yalnızca bir kullanıcı tanımlı etikete izin verilir.

Kod örnekleri

Aşağıdaki kod örneklerinde, bir posta listesindeki iletilerin nasıl etiketleneceği ve arşivlendiği gösterilmektedir:

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