Gmail 到 Google 传播 Sheet(仅日期、电子邮件和主题)

Gmail to Google Spread Sheet (only date, email and subject)

我拼凑的代码确实有效,但它从我的电子邮件中导入了错误的内容。我只想将发送日期、发件人电子邮件地址和主题导入 google sheet.

有人可以帮忙吗?

function onOpen() {
    const spreadsheet = SpreadsheetApp.getActive();
    let menuItems = [
        {name: 'Gather emails', functionName: 'gather'},
    ];
    spreadsheet.addMenu('SP LEGALS', menuItems);
}
      function gather() {
    let messages = getGmail();

    let curSheet = SpreadsheetApp.getActive();

    messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}
   function getGmail() {
      const query = "to:legals@salisburypost.com";

    let threads = GmailApp.search(query,0,10);

    let messages = [];

    threads.forEach(thread => {
        messages.push(thread.getMessages()[0].getPlainBody());
        label.addToThread(thread);
    });

    return messages;
}

function parseEmail(message){
    let parsed = message.replace(/,/g,'')
        .replace(/\n*.+:/g,',')
        .replace(/^,/,'')
        .replace(/\n/g,'')
        .split(',');

    let result = [0,1,2,3,4,6].map(index => parsed[index]);

    return result;
}

我相信你的目标如下。

  • 您想从搜索到的线程中的第一条消息中检索 "the date, sender and subject" 到 Google Spreadsheet.
  • 的活动 sheet

为此,这个答案怎么样?

修改点:

  • 在这种情况下,您可以使用 GmailApp 的内置方法检索 "the date, sender and subject"。
  • 将值放入Spreadsheet,在循环中使用appendRow时,处理成本会变高。
  • 您的脚本中似乎没有声明 label

当以上几点反映到你的脚本中,就变成了下面这样。

修改后的脚本:

在这次修改中,我修改了 gather()getGmail() 以实现您的目标。

function gather() {
  let messages = getGmail();
  if (messages.length > 0) {
    let curSheet = SpreadsheetApp.getActiveSheet();
    curSheet.getRange(curSheet.getLastRow() + 1, 1, messages.length, messages[0].length).setValues(messages);
  }
}

function getGmail() {
  const query = "to:legals@salisburypost.com";
  let threads = GmailApp.search(query,0,10);
  let messages = [];
  threads.forEach(thread => {
    const m = thread.getMessages()[0];
    messages.push([m.getDate(), m.getFrom(), m.getSubject()]);
//    label.addToThread(thread);
  });
  return messages;
}
  • 当没有使用 "to:legals@salisburypost.com" 检索线程时,不会将值放入 Spreadsheet。请注意这一点。

参考文献: