Управление фильтрами

Вы можете использовать фильтры для настройки расширенных правил фильтрации для учетной записи. Фильтры могут автоматически добавлять или удалять метки или перенаправлять электронные письма на проверенные псевдонимы на основе атрибутов или содержимого входящего сообщения.

Информацию о том, как создавать , перечислять , получать или удалять фильтры, см. в справочнике по фильтрам .

Критерии соответствия

Вы можете фильтровать сообщения по таким свойствам, как отправитель, дата темы, размер и содержимое сообщения. Любой запрос, использующий синтаксис расширенного поиска Gmail, также можно использовать в фильтре. Например, распространенные шаблоны фильтров включают в себя:

Фильтр Матчи
criteria.from='sender@example.com' Все электронные письма от sender@example.com
criteria.size=10485760
criteria.sizeComparison='larger'
Все электронные письма размером более 10 МБ.
criteria.hasAttachment=true Все электронные письма с вложениями
criteria.subject='[People with Pets]' Все электронные письма со строкой [People with Pets] в теме.
criteria.query='"my important project"' Все электронные письма, содержащие строку my important project
criteria.negatedQuery='"secret knock"' Все электронные письма, не содержащие secret knock

Если в фильтре присутствует несколько критериев, сообщение должно удовлетворять всем критериям, чтобы фильтр мог применяться.

Действия

Вы можете применить действие к сообщениям, соответствующим критериям фильтра. Сообщения могут быть перенаправлены на подтвержденный адрес электронной почты, а также к ним могут быть добавлены или удалены ярлыки .

Вы можете добавлять или удалять метки, чтобы изменить расположение электронного письма. Например, некоторые распространенные действия включают в себя:

Действие Эффект
action.removeLabelIds=['INBOX'] Архивируйте электронную почту (пропустите входящие)
action.removeLabelIds=['UNREAD'] пометить, как прочитанное
action.removeLabelIds=['SPAM'] Никогда не отмечать как спам
action.removeLabelIds=['IMPORTANT'] Никогда не отмечайте как важные
action.addLabelIds=['IMPORTANT'] Отметить как важное
action.addLabelIds=['TRASH'] Удалить электронное письмо
action.addLabelIds=['STARRED'] Отметить как помеченное
action.addLabelIds=['<user label id>'] Пометьте письмо меткой, определяемой пользователем. Для каждого фильтра допускается только одна определяемая пользователем метка.

Примеры

Ниже приведен более полный пример, показывающий, как маркировать и архивировать сообщения из списка рассылки.

Джава

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;
  }
}

Питон

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