仅将原始 Gmail 邮件传输到 google 个工作表而不是回复
Transfer original gmail messages only to google sheets and not replies
我有以下脚本,它在我的 gmail 中搜索特定查询,然后将其导入 google 工作表。它似乎有效,但它也会导入对我不想包含的原始电子邮件的回复。有没有一种方法可以修改我的脚本,使其只显示原始电子邮件,而不显示其他人可能添加的任何回复?非常感谢。
var SEARCH_QUERY = "newer_than:1d from:contactcentrequeries AND subject:feedback";
/*
Credit: Alexander Ivanov
https://gist.github.com/contributorpw/70e04a67f1f5fd96a708
*/
function getEmails_(q) {
var emails = [];
var threads = GmailApp.search(q);
for (var i in threads) {
var msgs = threads[i].getMessages();
for (var j in msgs) {
emails.push([msgs[j].getBody().replace(/<.+?>/g, '\n')
.replace(/^\s*\n/gm, '').replace(/^\s*/gm, '').replace(/\s*\n/gm, '\n')
]);
}
}
return emails;
}
function appendData_(sheet, array2d) {
sheet.getRange(sheet.getLastRow() + 1, 1, array2d.length, array2d[0].length).setValues(array2d);
}
function saveEmails() {
var array2d = getEmails_(SEARCH_QUERY);
if (array2d) {
appendData_(SpreadsheetApp.getActiveSheet(), array2d);
}
}
根据您提供的代码,问题似乎与您如何调用 msgs
变量有关。更准确地说,threads[i].getMessages();
行代码将检索 thread i
的所有消息。如果您只想 获取线程的第一条消息 - 这实际上是原始电子邮件,您应该简单地使用 msgs[0]
而不是另一个 for
循环。
因此,您的代码应如下所示:
for (var i in threads) {
var msgs = threads[i].getMessages();
emails.push([
msgs[0]
.getBody()
.replace(/<.+?>/g, "\n")
.replace(/^\s*\n/gm, "")
.replace(/^\s*/gm, "")
.replace(/\s*\n/gm, "\n")
]);
}
参考
我有以下脚本,它在我的 gmail 中搜索特定查询,然后将其导入 google 工作表。它似乎有效,但它也会导入对我不想包含的原始电子邮件的回复。有没有一种方法可以修改我的脚本,使其只显示原始电子邮件,而不显示其他人可能添加的任何回复?非常感谢。
var SEARCH_QUERY = "newer_than:1d from:contactcentrequeries AND subject:feedback";
/*
Credit: Alexander Ivanov
https://gist.github.com/contributorpw/70e04a67f1f5fd96a708
*/
function getEmails_(q) {
var emails = [];
var threads = GmailApp.search(q);
for (var i in threads) {
var msgs = threads[i].getMessages();
for (var j in msgs) {
emails.push([msgs[j].getBody().replace(/<.+?>/g, '\n')
.replace(/^\s*\n/gm, '').replace(/^\s*/gm, '').replace(/\s*\n/gm, '\n')
]);
}
}
return emails;
}
function appendData_(sheet, array2d) {
sheet.getRange(sheet.getLastRow() + 1, 1, array2d.length, array2d[0].length).setValues(array2d);
}
function saveEmails() {
var array2d = getEmails_(SEARCH_QUERY);
if (array2d) {
appendData_(SpreadsheetApp.getActiveSheet(), array2d);
}
}
根据您提供的代码,问题似乎与您如何调用 msgs
变量有关。更准确地说,threads[i].getMessages();
行代码将检索 thread i
的所有消息。如果您只想 获取线程的第一条消息 - 这实际上是原始电子邮件,您应该简单地使用 msgs[0]
而不是另一个 for
循环。
因此,您的代码应如下所示:
for (var i in threads) {
var msgs = threads[i].getMessages();
emails.push([
msgs[0]
.getBody()
.replace(/<.+?>/g, "\n")
.replace(/^\s*\n/gm, "")
.replace(/^\s*/gm, "")
.replace(/\s*\n/gm, "\n")
]);
}
参考