google-apps-script - 仅将原始 gmail 消息传输到 google 表格而不是回复
问题描述
我有以下脚本,它在我的 gmail 中搜索某个查询,然后将其导入谷歌表格。它似乎有效,但它也会导入对我不想包含的原始电子邮件的回复。有没有办法可以修改我的脚本,使其仅显示原始电子邮件,而不显示其他人可能添加的任何回复?非常感谢。
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")
]);
}
参考
推荐阅读
- c++ - 为什么在与前缀和矩阵相关的问题中 1 个 for 循环比 2 个 for 循环慢?
- java - 如果 ResponseEntity 失败(400 错误),我们如何传递响应
- hive - 有没有我们不想重用 tez 容器的场景?
- python - 根据具有特定条件的另一个行值更新行值,pandas
- r - 如何从 HTML 代码中提取特定的数字字符串?
- python - 如何从 Python 中的列表中删除字符串
- javascript - 在 Mapbox GLJS 中向 swipetool 添加一个额外的层?
- go - go中的字数
- microsoft-teams - Microsoft 团队频道删除事件侦听器
- javascript - 如何正确处理 jquery 事件绑定?