【问题标题】:gmail script only pull from first email of each threadgmail 脚本仅从每个线程的第一封电子邮件中提取
【发布时间】:2016-01-09 03:20:42
【问题描述】:

我正在尝试使用使用正则表达式的脚本从 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);
}
  };

【问题讨论】:

  • 我想通了...我有脚本的组件,但我猜它没有正确组合在一起。感谢您的帮助,因为您可能会说我在编写脚本方面的经验非常少。再次感谢

标签: multithreading google-sheets gmail-api


【解决方案1】:

你不能也循环浏览消息吗?

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】:

我在我的 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多