Управление идентификатором фильтра Gmail - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать фильтр для электронной почты всех людей в группе.Однако иногда электронная почта человека может измениться, например, добавить новую электронную почту или перейти на другую электронную почту.Это означает, что я должен соответствующим образом обновить фильтр.Я пытался создать фильтр с идентификатором, который с именем человека.Так что я могу получить этот фильтр, чтобы изменить его.Однако, похоже, что идентификатор фильтра Gmail создается автоматически.

var filter = Gmail.newFilter()
var email = 'something@some.com'
filter.id = 'person'
filter.criteria = Gmail.newFilterCriteria()
filter.criteria.query = email
filter.action = Gmail.newFilterAction()
filter.action.addLabelIds = ['Label_1']
Gmail.Users.Settings.Filters.create(filter, 'me')  

Когда я вернусь к фильтру, он скажет, что его не удалось найти

var filter2 = Gmail.Users.Settings.Filters.get('me', 'person')

Это вернет ошибку Not Found, даже если я вижу фильтр в настройках моего Gmail.Фактически ID для фильтра, который я создал выше: ANe1Bmgel8OKlEXD-uArX77ISk35Lph1MbWWjA.

Мой вопрос: каков хороший способ управлять фильтрами через изменения, держать их в курсе?

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Вместо:

Gmail.Users.Settings.Filters.create(filter, 'me');

Попробуйте:

var filterProps = Gmail.Users.Settings.Filters.create(filter, 'me');
var filterId = filterProps.id;

Согласно документации API для создание фильтра ,

В случае успеха этот метод возвращает ресурс Users.settings.filters в теле ответа.

Приведенный выше код работал для меня в аналогичной ситуации.Чтобы отслеживать идентификатор фильтра вне Gmail, вы можете привязать имя человека к идентификатору через службу свойств:

PropertiesService.getScriptProperties().setProperty(nameVar, filterID);

, а затем получить его следующим образом:

PropertiesService.getScriptProperties().getProperty(nameVar);
0 голосов
/ 14 октября 2018

Согласно документации API для ресурса Filter :

id: string Серверу назначен идентификаторфильтр.

Таким образом, вы не можете присвоить идентификатор, и любое значение, установленное для него в вызове .create, игнорируется.

Вы все еще можете программно получить этот фильтр,используя .list и Array#filter, например

function getAllFilters_(userId) {
  const options = {};
  const filters = [];
  do {
    var search = Gmail.Users.Settings.Filters.list(userId, options);
    if (search.filter && search.filter.length) {
      Array.prototype.push.apply(filters, search.filter);
    options.pageToken = search.nextPageToken;
  } while (options.pageToken);
  return filters;
}
function getFiltersWithCriteria_(filterList, criteria) {
  // `criteria` is an object of parameters that must be exactly matched in the filters' criteria property
  const props = Object.keys(criteria);
  const matches = filterList.filter(function (gFilter) {
    // gFilter is a https://developers.google.com/gmail/api/v1/reference/users/settings/filters#resource
    var fCriteria = gFilter.criteria;
    return props.every(function (prop) {
      return criteria[prop] === fCriteria[prop];
    });
  });
  return matches;
}
function foo() {
  const filters = getAllFilters_("me");
  const matched = getFiltersWithCriteria_(filters, {
    from: "george@example.com",
    hasAttachment: true
  });
  console.log({message: "Matching filters", matches: matched});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...