Изменить ярлык Gmail после загрузки вложения на диск - PullRequest
0 голосов
/ 06 марта 2020

Как удалить существующий ярлык «Глобальный алкоголь» и добавить ярлык «Глобальный обработанный» к сообщениям электронной почты, в которых вложения были загружены на Google Диск с помощью следующего кода? Я должен отдать должное Куперу, который ответил на мой первый вопрос и помог мне заставить загрузку работать.

function saveAttachmentInFolder(){
  var folder = DriveApp.getFolderById('xxxxxxxxxxxxx');
  var userId = "myemail@gmail.com";
  var query = "label:Global Alcohol";
  var res = Gmail.Users.Messages.list(userId, {q: query});//I assumed that this works
  res.messages.forEach(function(m){
    var attA=GmailApp.getMessageById(m.id).getAttachments();
    attA.forEach(function(a){
      var ts=Utilities.formatDate(new Date(),Session.getScriptTimeZone(), "yyMMddHHmmss");
      folder.createFile(a.copyBlob()).setName(a.getName()+ts);
    });
  });
}

Я прочитал документацию по API и вижу, что вам нужно использовать следующий код для изменения меток. Однако я застрял с тем, как интегрировать его в функцию выше.

function modifyMessage(userId, messageId, labelsToAdd, labelsToRemove, callback) {
  var request = gapi.client.gmail.users.messages.modify({
    'userId': userId,
    'id': messageId,
    'addLabelIds': labelsToAdd,
    'removeLabelIds': labelsToRemove
  });
  request.execute(callback);
}

1 Ответ

1 голос
/ 06 марта 2020

Вы были на правильном пути с вызовом модификации, но форматирование немного отключено. Хитрость заключается в том, что вам нужно использовать идентификаторы меток, поэтому я написал новую функцию getLabelsByName(), которая позволяет выполнять этот поиск.

function saveAttachmentInFolder(){
  var folder = DriveApp.getFolderById('xxxxxxxxxxxxx');
  var userId = "myemail@gmail.com";
  var query = "label:Global Alcohol";
  var labels = getLabelsByName(userId, ["Global Alcohol", "Global Processed"]);
  var res = Gmail.Users.Messages.list(userId, {q: query});//I assumed that this works  
  res.messages.forEach(function(m){
    var attA=GmailApp.getMessageById(m.id).getAttachments();
    attA.forEach(function(a){
      var ts=Utilities.formatDate(new Date(),Session.getScriptTimeZone(), "yyMMddHHmmss");
      folder.createFile(a.copyBlob()).setName(a.getName()+ts);
    });

    // Remove the old label & add the new one
    Gmail.Users.Messages.modify({
      addLabelIds: [labels["Global Processed"].id],
      removeLabelIds: [labels["Global Alcohol"].id]
    }, userId, m.id);
  });
}

/**
 * Lookup any number of labels by their name using the advanced Gmail service.
 * @param {String} userId - The user's email address or "me" to get your own
 * @param {String[]} labelNames - An array of labels names to search for
 * @returns {Label{}} - Map of labels identified by label name
 * https://developers.google.com/gmail/api/v1/reference/users/labels
 */
function getLabelsByName(userId, labelNames) {
  var response = Gmail.Users.Labels.list(userId);
  var selectedLabels = {};
  for (var i = 0; i < response.labels.length; i++) {
    var label = response.labels[i];
    if (labelNames.indexOf(label.name) != -1) {
      selectedLabels[label.name] = label;
    }
  }
  return selectedLabels;
}
...