Не удается найти метод moveThreadToInbox((класс))

Иногда при запуске аддон выдает следующую ошибку:

Ошибка надстройки.
Ошибка выполнения.

Не удается найти метод moveThreadToInbox((класс)). [строка 102, функция:, файл: код]

В остальное время работает отлично.

Я попытался справиться с этим так, как это делает Google в демоверсии здесь

Но все равно получайте ту же ошибку. На самом деле, если подумать... это, вероятно, не лучший способ сделать это. Поскольку запрос может вернуть тему с той же строкой. Затем я попытался использовать идентификатор для новой почты, но это не очень хорошо работало с moveThreadToInbox.

Код и сообщения об ошибках приведены ниже:

Строка кода, на которую ссылается ошибка: GmailApp.moveThreadToInbox(newMailSearch[0]);

Полный раздел кода:

function editThreadSubject(e) {
  var accessToken = e.messageMetadata.accessToken;
  GmailApp.setCurrentMessageAccessToken(accessToken);
  var newSubject = e.formInputs.newSubject;
  var firstMessage = GmailApp.getMessageById(e.messageMetadata.messageId)
    .getThread()
    .getMessages()[0];
  var oldSubject = firstMessage.getSubject();
  var thread = GmailApp.getMessageById(e.messageMetadata.messageId).getThread();
  thread.getMessages().forEach(function(message) {
    GmailApp.setCurrentMessageAccessToken(accessToken);
    var messageId = message.getId();
    var email = getEmail(messageId, accessToken);
    var unencoded = Utilities.newBlob(
      Utilities.base64DecodeWebSafe(email.raw)
    ).getDataAsString();
    var updatedEmail = unencoded.replace(
      "Subject: " + oldSubject,
      "Subject: " + newSubject
    );
    email.raw = Utilities.base64EncodeWebSafe(updatedEmail);
    var newMail = Gmail.Users.Messages.import(
      {
        raw: email.raw
      },
      "me",
      Utilities.newBlob(email, "message/rfc822"),
      {
        deleted: false,
        internalDateSource: "dateHeader",
        neverMarkSpam: true,
        processForCalendar: false
      }
    );
    var newMailId = newMail.id;
    var query = ["Subject:" + newSubject];
    var newMailSearch = GmailApp.search(query);
    GmailApp.moveThreadToInbox(newMailSearch[0]);
    Gmail.Users.Messages.remove("me", messageId);
  });
  var notification = CardService.newNotification().setText(
    "The subject has been updated"
  );
  var actionResponse = CardService.newActionResponseBuilder()
    .setNotification(notification)
    .setStateChanged(true)
    .build();
  return actionResponse;
}

Он должен вставить новую почту в Gmail, удалить старую почту и переместить новую почту в папку «Входящие». Как я уже сказал, иногда это работает, поэтому я застрял, пытаясь понять, почему это не работает, когда это не так!

Если бы кто-нибудь мог указать мне правильное направление, это было бы фантастически и спасло бы меня от преждевременного облысения из-за того, что я выдергивал волосы!


person SL8t7    schedule 21.06.2019    source источник


Ответы (1)


Вероятно, вам следует поместить какой-либо тест между этим var newMailSearch = GmailApp.search(query); и этим GmailApp.moveThreadToInbox(newMailSearch[0]);, чтобы убедиться, что возвращаемое значение соответствует значению подхода и/или требованиям типа для функции.

person Cooper    schedule 21.06.2019