我一直在努力从自动Gmail邮件中自动提取数据。每天有多个电子邮件使用相同的标签,因此理想情况下我想循环浏览每封电子邮件,并提取一些数据。我已经将它设置为使用一些正则表达式来获取数据,它适用于第一封电子邮件。但是,它无法正确循环以查找带有标签的下一封电子邮件。这是我到目前为止的代码:
BeforeRightClick
第一次正确循环,然后给我一个错误:TypeError:无法调用未定义的方法“getPlainBody”。
非常感谢任何帮助!
答案 0 :(得分:1)
您看到该错误,因为您应该在for循环中使用k变量来获取该标签的每条消息。请查看以下这一行:
threads[i].getMessages()[k].getPlainBody()
尝试在for循环中更改此行,并为我工作。
希望有所帮助!
答案 1 :(得分:0)
在简化我的代码之后,我能够让脚本通过我的电子邮件正确循环。这是对我有用的代码:
function processInboxToSheet() {
// Have to get data separate to avoid google app script limit!
//var start = 0;
var label = GmailApp.getUserLabelByName("Bounce");
var threads = label.getThreads();
var sheet = SpreadsheetApp.getActiveSheet();
var result = [];
var newLabel = GmailApp.getUserLabelByName("Done");
var oldLabel = GmailApp.getUserLabelByName("Bounce");
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
var content = messages[0].getPlainBody();
// implement your own parsing rule inside
if (content) {
var tmp;
tmp = content.match(/[\n\r].*First Name\s*:\s*([^\n\r]*)/);
var firstname = (tmp && tmp[1]) ? tmp[1].trim() : 'No username';
tmp = content.match(/[\n\r].*Last Name\s*:\s*([^\n\r]*)/);
var lastname = (tmp && tmp[1]) ? tmp[1].trim() : 'No Lastname';
tmp = content.match(/[\n\r].*Customer ID\s*:\s*([^\n\r]*)/);
var customerID = (tmp) ? tmp[1].trim() : 'No CustomerID';
tmp = content.match(/[\n\r].*Invoice\s*:\s*([^\n\r]*)/);
var invoice = (tmp) ? tmp[1].trim() : 'No Invoice';
sheet.appendRow([firstname, lastname, customerID, invoice]);
}
Utilities.sleep(500);
threads[i].addLabel(newLabel).removeLabel(oldLabel).refresh();
}
};