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