找不到方法moveThreadToInbox((class))

时间:2019-06-21 15:22:12

标签: javascript google-apps-script gmail gmail-addons

有时,在运行插件时,它将引发以下错误:

  

附加组件出错。
  运行时错误。

     

找不到方法moveThreadToInbox((class))。 [第102行,function:,file:Code]

其他时候,它工作得很好。

我已尝试在演示here

中处理Google的处理方式

但是仍然会出现相同的错误。实际上,考虑一下……这可能不是最好的方法。由于查询可能返回具有相同字符串的主题。因此,我然后尝试将ID用于新邮件,但这对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,删除旧邮件,然后在收件箱中移动新邮件。正如我所说,它有时会起作用,所以我一直试图找出为什么它在不起作用时不起作用的原因!

如果任何人都可以将我指向正确的方向,那将是很棒的事情,并且可以挽救我的头发,使我过早秃顶!

1 个答案:

答案 0 :(得分:0)

您可能应该在此var newMailSearch = GmailApp.search(query);和此 GmailApp.moveThreadToInbox(newMailSearch[0]);之间进行某种类型的测试,以确保返回的内容满足该方法的逼近值和/或类型要求。