إدارة فلاتر Gmail

يوضّح هذا المستند كيفية استخدام الفلاتر في Gmail API.

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

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

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

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

إضافة تصنيفات أو إزالتها لتغيير حالة الرسالة الإلكترونية على سبيل المثال، تشمل بعض الإجراءات الشائعة ما يلي:

الإجراء التأثير
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;
  }
}

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