إدارة الفلاتر

يمكنك استخدام الفلاتر لضبط قواعد الفلترة المتقدمة لأحد الحسابات. يمكن للفلاتر إضافة التصنيفات أو إزالتها تلقائيًا أو إعادة توجيه الرسائل الإلكترونية إلى أسماء مستعارة تم إثبات ملكيتها استنادًا إلى سمات أو محتوى الرسالة الواردة.

للحصول على معلومات حول كيفية إنشاء الفلاتر أو إدراجها أو الحصول عليها أو حذفها، يمكنك الاطّلاع على مرجع الفلاتر.

معايير المطابقة

يمكنك فلترة الرسائل حسب السمات، مثل المُرسِل وتاريخ الموضوع وحجمها ومحتوى الرسالة. يمكن أيضًا استخدام أي طلب بحث يستخدم بنية البحث المتقدم في 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>'] ضَع علامة على البريد باستخدام تصنيف من تحديد المستخدم. يُسمح بتصنيف واحد فقط من تحديد المستخدم لكل فلتر.

أمثلة

فيما يلي مثال أكثر اكتمالاً يوضح كيفية تصنيف الرسائل من القائمة البريدية وأرشفتها.

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