gmail脚本仅从每个帖子的第一封电子邮件中提取

时间:2015-10-11 17:01:54

标签: multithreading google-sheets gmail-api

我尝试使用使用正则表达式的脚本解析g-mail消息中的提取数据。得到了脚本的其余主要功能,但有一个很大的问题。

该脚本仅返回每个线程的第一条消息中的数据。我希望它能从每个帖子中的每条消息中返回数据,我一直在玩它,但到目前为止还没有运气。

非常感谢任何帮助。

谢谢!

function processInboxToSheet() {


var start = 0;
var threads = GmailApp.getInboxThreads(start, 100);
var SPREADSHEET_URL =    "https://docs.google.com/spreadsheets/d/1QDg";
var SHEET_NAME = 'Sheet1';
var result = [];


var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
var sheet = spreadsheet.getSheetByName(SHEET_NAME);

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

var content = messages[0].getRawContent();

这是剧本的后半部分:

if (content) {
  var tmp;
  tmp = content.match(/\<\!\-\-\soutRadius\s\s\[*(.+?)\]/);

  var radius = (tmp && tmp[1]) ? tmp[1].trim() : 'Unknown Radius';

  tmp = content.match(/\<\!\-\-\sX\s\s\[*(.+?)\]/);
  var longitude = (tmp && tmp[1]) ? tmp[1].trim() : 'Unknown Latitude';

  tmp = content.match(/\<\!\-\-\sY\s\s\[*(.+?)\]/);
  var latitude = (tmp && tmp[1]) ? tmp[1].trim() : 'Unknown Longitude';

  tmp = content.match(/\The mobile number was located on\s*(.+?)\s/);
  var date = (tmp && tmp[1]) ? tmp[1] : 'Unknown date';

  tmp = content.match(/([\d:]*)\s*GMT/);
  var time = (tmp && tmp[1]) ? tmp[1] : 'Unknown time';

  sheet.appendRow([date, time, longitude, latitude, radius]);

  Utilities.sleep(500);
}
  };

3 个答案:

答案 0 :(得分:1)

我明白了......

我有脚本的组件,但我猜它没有正确放在一起。感谢您的帮助,因为您可能会说我对脚本编写的经验非常少。

再次感谢

答案 1 :(得分:0)

你不能只是循环播放这些消息吗?

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

  for(var j = 0; j < messages; j++) {
    var content = messages[j].getRawContent();
  }
}

答案 2 :(得分:0)

好吧,我的PHP API遇到了类似的问题,由于某种原因,我刚收到第一条消息。一段时间后,我在GMAIL帐户中从消息中删除了标签并重新添加,但令我惊讶的是,该API已使用丢失的数据进行了更新。

此后,每次我想获取一个线程时,我都会强制对该线程进行更新,并且我总是收到正确的数据,不知道为什么,但是它是可行的。

我在选择邮件之前运行的代码示例:

public function updateThread($threadId, $labels){              
    $modify = new Google_Service_Gmail_ModifyThreadRequest;
    $modify->setAddLabelIds($labels);        
    return $this->service->users_threads->modify($this->userId, $threadId, $modify);
}