【问题标题】:select single email instead of whole thread选择单个电子邮件而不是整个线程
【发布时间】:2019-09-09 08:03:23
【问题描述】:

我有一个脚本,可以将我的电子邮件正文从 Gmail 导入 google-sheet 单元格,基本上我会搜索已加星标的电子邮件并在最后将其带入我取消星标(下次运行时它不应该再次出现)时间)。但是,我遇到了一个问题,它带来了电子邮件的整个线程。澄清一下:我的 gmail 设置设置为“关闭会话视图”,这就是我在收件箱中看到它的方式,每个消息都是分开的,但看起来在 Gmail API 中它仍然存储为一个长线程...... 如何在没有整个线程的情况下只导入一个味精? (线程不是真正的对话,它只是来自同一发件人和同一主题的自动电子邮件,这就是 Gmail 将其视为线程的原因,所以如果有办法阻止它,那也会有所帮助。)

我的代码如下。

var SEARCH_QUERY = "label:web is:unread to:me is:starred";

function getEmails_(q) {
var emails = [];
emails.length = 0;
var threads = GmailApp.search(q);
for (var i in threads) {
var msgs = threads[i].getMessages();
for (var j in msgs) {
emails.push([msgs[j].getPlainBody().replace(/<.*?>/g, '\n')
.replace(/^\s*\n/gm, '').replace(/^\s*/gm, '').replace(/\s*\n/gm, '\n')]);

msgs[j].unstar().refresh();
}
}
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.getActiveSpreadsheet().getSheetByName('Web 
Email'), array2d);
}
}

【问题讨论】:

    标签: google-apps-script google-sheets gmail


    【解决方案1】:

    查看GmailApp documentation--其中包含对可用方法和它们返回的对象类型的说明。您正在尝试获取 GmailMessage 对象,但 GmailApp.search() 根据设计返回一组 GmailThread 对象。我不相信可以在 Gmail 中搜索特定邮件 - 正如您的代码所示,您可以获取搜索返回的线程数组并循环遍历它们,使用 getMessages() 获取特定邮件。

    【讨论】:

    • 那么是否可以只获取线程的最后一个msg,所以我基本上会在新邮件到达时设置触发器,并且每次只获取线程的最后一个msg,
    • 您仍然需要先获取线程中的所有消息,但是通过选择第 0 条消息来获取最后一条消息是微不足道的;我不确定这个日期排序是否是规范的一部分,但至少足够可靠the documentation implies its use
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多