Search code examples
javascriptgoogle-apps-scriptgmailgmail-apigmail-addons

Gmail Apps script function to list contents of All draft messages


I'm looking for a Google Apps script for Gmail that would list the contents of the most recent draft message. So far my code is:

function listDrafts() {
  var drafts = Gmail.Users.Drafts.list('me')
  if (drafts.drafts.length == 0) {
    Logger.log('No draft messages found.');
  } else {
    Logger.log('Drafts:');
    for (var i = 0; i < drafts.drafts.length; i++) {
      var draft = drafts.drafts[i].message.payload.headers[i].value;
      Logger.log('- %s', draft);
    }
  }
}

However, I keep getting an error on run. Appreciate any help.


Solution

  • From your script, when Gmail API is enabled at Advanced Google services, I thought that an error might occur at the line of var draft = drafts.drafts[i].message.payload.headers[i].value;, because drafts.drafts[i].message.payload returns undefined. If my understanding is correct, how about the following modification?

    Modified script:

    When your script is modified, how about the following modification?

    From:
    var draft = drafts.drafts[i].message.payload.headers[i].value;
    
    To:
    var draft = Gmail.Users.Drafts.get("me", drafts.drafts[i].id).message.payload.headers[i].value;
    

    or

    To:
    var headers = Gmail.Users.Drafts.get("me", drafts.drafts[i].id).message.payload.headers;
    for (var j = 0; j < headers.length; j++) {
      Logger.log(headers[j].value)
    }
    

    Note:

    References:

    If I misunderstood your question and this was not the direction you want, I apologize.

    Edit:

    • You want to retrieve the email from the headers of Gmail.Users.Drafts.

    For this situation, how about the following modification?

    Modified script:

    From:
    var draft = drafts.drafts[i].message.payload.headers[i].value;
    
    To:
    var headers = Gmail.Users.Drafts.get("me", drafts.drafts[i].id).message.payload.headers;
    for (var j = 0; j < headers.length; j++) {
      var search = ["From", "To"];
      if (search.indexOf(headers[j].name) != -1) {
        Logger.log(headers[j].value)
      }
    }
    
    • If you want to retrieve the values except for "From" and "To", please modify var search = ["From", "To"];