【问题标题】:Logging Google mail in Google sheet, Google Apps Script在 Google 表格、Google Apps 脚本中记录 Google 邮件
【发布时间】:2018-11-30 15:17:21
【问题描述】:

帮助!我使用的脚本基本上是从 Bionice Teaching 的 Tom Woodward 那里抄来的,在电子表格中记录电子邮件信息。 http://bionicteaching.com/auto-logging-email-via-google-script/ 我需要添加一个列来收集已附加到消息的所有标签。我需要为我的工作完成这项工作,但我是 Google Apps 脚本的新手,真的需要有人握住我的手……基本上是为我做这件事,然后教我你做了什么。在任何情况下,我都非常感谢您能给我的任何帮助。谢谢 这是我正在使用的:

function myFunction() {

//this is just the stuff that recognizes what spreadsheet you're in
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheets = ss.getSheets();
   var sheet = ss.getSheetByName("data"); //gets the right sheet

//this chunk gets the date info  
 var today = new Date();
 var dd = today.getDate()-1;
 var mm = today.getMonth()+1; //January is 0 DO NOT FORGET THIS
 var yyyy = today.getFullYear();
 var yesterday = yyyy + '/' + mm + '/' + dd;

//****************************************************  
//searches your GMail for emails written after yesterday
  var query = "after:" + yesterday;

  var threads = GmailApp.search(query);
  Logger.log('threads len ' + threads.length);

  Logger.log(query);

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    Logger.log(messages);    
    for (var m = 0; m < messages.length; m++) {
       var supportStats = [];

//here's where you decide what parts of the email you want
      var from = messages[m].getFrom(); //from field
      Logger.log(from);
      var time = messages[m].getDate();//date field
      Logger.log(time);
      var subject = messages[m].getSubject();//subject field
      Logger.log(subject);
      var body = messages[m].getPlainBody();//body field
      Logger.log(body);
      var mId = messages[m].getId();//id field to create the link later

      var mYear = time.getFullYear();
      var mMonth = time.getMonth()+1;
      var mDay = time.getDate();
      var messageDate = mYear + '/' + mMonth + '/' + mDay;
      Logger.log('msg date ' + messageDate);

//decides what found emails match yesterday's date and push them to an array to write to the spreadsheet
      if (messageDate === yesterday) {
      supportStats.push(from);
      supportStats.push(time);
      supportStats.push(subject);
      supportStats.push(body);
      supportStats.push('https://mail.google.com/mail/u/0/#inbox/'+mId); //build the URL to the email
      SpreadsheetApp.getActiveSheet().appendRow(supportStats); //writes to the spreadsheet
      }
    }

  }          

}

这是我得到的结果......完美! 除了我想要一列添加每条消息上的标签。我怎么做? spreatsheet results of Google Apps script mail->sheet

【问题讨论】:

  • 我可以问你关于你的问题吗?你能提供你当前脚本的问题吗?例如,如果结果不是您想要的和/或发生错误,请显示出来。
  • 我相信标签是附加在线程上的,而不是消息上。所以你可以使用messages[m].getThread().getLabels()

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


【解决方案1】:

你可以用这个:

var labels = threads[i].getLabels();

GmailThread::getLabels()

GmailThread 有标签,而不是 GmailMessage。它返回一个标签数组。也许使用:

var labelsString = "";
var labelArray = []
for each (var label in labels)
{
  labelArray.push(label.getName());
}
if (labelArray.length > 0)
{
  labelsString = labelArray.join(','); 
} 

插入到电子表格的行中。

GmailLabel::getName()

【讨论】:

  • 不推荐使用for each (var ... in...) 语法。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 考虑使用 array#map 或 array#reduce,例如var labelsToPrint = thread.getLabels().map(function (label) { return label.getName(); }).join(", ");
  • 谁能告诉我究竟如何使用这个修复程序?我不确定在哪里添加此代码。
猜你喜欢
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多