【问题标题】:How to get all draft message with specific label attached to it如何获取所有带有特定标签的草稿消息
【发布时间】:2015-10-04 11:33:43
【问题描述】:

我编写了一个脚本,我想在其中提取标签为shc 的所有草稿消息。

代码:

function getDraftsWithLabel_shc() {
 Logger.clear();
 Logger.log("fn start..");
 var drafts = GmailApp.getDraftMessages(); //getUserLabelByName(ulables[x].getName()).

 var label = GmailApp.getUserLabelByName("shc");
     Logger.log(label);
     var threads = label.getThreads();
     Logger.log("LBL NAME ="+label.getName());
     Logger.log("THREAD ="+threads.length);

 for (var i = 0; i < threads.length; i++) {

       var message=threads[i].getMessages();
       Logger.log(" thread ID = "+threads[i].getId());

       if(message.length<0)
       {
           for(m=0;m<message.length;m++){
              var isD=message[m].isDraft();
              Logger.log("is Draft ="+isD);
              if(isD)
              {
                    Logger.log(message[m].getSubject()+" = "+message[m].getTo()+" = "+message[m].getDate());
              }
           }
       } 
       else 
       {
           Logger.log("No mesage");
       }
 } 
   Logger.log("fn Ends..");

}

在代码中,我试图获取标签名称,然后获取相应的线程。然后循环线程并使用getMessages() 检查当前是否为isDraft,然后根据条件获取所有其他详细信息。

首先我无法收到消息。其次,是否有任何有效的方法可以直接获取具有特定标签的所有 Draft 线程,因为在所有线程上循环会花费很多时间


日志截图:

【问题讨论】:

    标签: google-apps-script google-sheets google-spreadsheet-api gmail-api


    【解决方案1】:

    您可以让 Google 为您完成所有繁重的工作,方法是直接列出消息,并明确说明您想要标签为 shc 的消息并且它们应该是 drafts。

    query = is:draft AND in:shc
    
    GET https://www.googleapis.com/gmail/v1/users/me/messages?q=is%3Adraft+AND+in%3Ashc&access_token={YOUR_API_KEY}
    

    我不完全确定如何在您的框架中执行此操作。你比我清楚!

    编辑 1

    正如 Eric 所指出的,这将为您提供您感兴趣的所有草稿的 messageId,而不是 DraftId。 Drafts.list() 但是不支持自定义查询。无赖。

    一种解决方案是如上所述列出所有相关草稿,同时获取所有草稿。两个请求都得到答复后,您可以找出哪些 messageId 重叠。具有重叠 messageIds 的消息具有您正在寻找的 draftIds。 (如果你不关心draftIds,上面的解决方案当然就足够了)

    编辑 2

    Drafts.list() 现在支持q-参数:

    请求

    q = is:draft AND in:STARRED
    
    GET https://www.googleapis.com/gmail/v1/users/me/drafts?q=is%3Adraft+AND+in%3ASTARRED&access_token={YOUR_ACCESS_TOKEN}
    

    回应

    {
     "drafts": [
      {
       "id": "1540187177260115336",
       "message": {
        "id": "155fd813d4336588",
        "threadId": "155fd813d4336588"
       }
      }
     ],
     "resultSizeEstimate": 1
    }
    

    【讨论】:

    • +1 非常感谢您的回复,您的回答给了我一个新的思考方向,通过使用.search(QUERY) 我得到了结果。但不确定是否是正确的方法(性能方面)。未标记为答案,仍在等待更多答案:)
    • @Satindersingh 没问题!是的,让我们看看其他人会怎么说 :) 我很确定这是要走的路,因为它只是一个请求而不是多个请求,Google 必须为您完成这项工作!
    • messages.list() 会给你它们,但只有消息 ID,而不是草稿 ID。因此,一旦您知道消息 ID,您将无法调用任何草稿。*() 方法。
    • @EricDeFrez 啊,好点子。而且 drafts.list() 不支持查询。射击。
    【解决方案2】:

    drafts.list() 现在接受原始查询参数q,因此您可以简单地指定它来执行您想要的操作。比如:

    q=in:<label>
    

    有关详细信息,请参阅 Gmail API 的 Users.drafts: list 文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2017-01-05
      • 2013-06-01
      相关资源
      最近更新 更多