【问题标题】:Parsing Gmail into Google Sheets using Google Apps Script使用 Google Apps 脚本将 Gmail 解析为 Google 表格
【发布时间】:2022-09-25 01:42:44
【问题描述】:

我正在尝试使用特定主题解析 Gmail,并将数据输出到特定列中的谷歌表。我只使用 getPlainBody() 选项让脚本工作,但后来我尝试添加 getDate() ,现在出现错误。

我确信我的语法有问题,现在我在 getGmail 和收集函数中尝试各种事情。我当前的代码如下,运行时,电子邮件的日期位于 A 列,电子邮件的整个正文位于 B 列,我收到错误“TypeError:message.replace 不是函数”。

    function onOpen() {
    const spreadsheet = SpreadsheetApp.getActive();
    let menuItems = [
        {name: \'Gather emails\', functionName: \'gather\'},
    ];
    spreadsheet.addMenu(\'New Employees\', menuItems);
}
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);
     messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
  }
}

function getGmail() {
  const query = \"from:(ApplicationServices@help.net) subject:New Account Newer_than:18d NOT label:done\";
  let threads = GmailApp.search(query,0,10);

  let label = GmailApp.getUserLabelByName(\"done\");
  if (!label) {label = GmailApp.createLabel(\"done\")}

  let messages = [];
  threads.forEach(thread => {
    const m = thread.getMessages()[0];
    messages.push([m.getDate(), m.getPlainBody()]);
    label.addToThread(thread);
  });
  return messages;
}

function parseEmail(message){
    let parsed = message.replace(/,/g,\'\')
        .replace(/\\n\\s*.+: /g,\',\')
        .replace(/^,/,\'\')
        .replace(/\\n/g,\'\')
        .replace(/^[\\s]+|[\\s]+$/g,\'\')
        .replace(/\\r/g,\'\')
        .split(\',\');
    let result = [0,1,2,3,4,5,6,7].map(index => parsed[index]);

    return result;
}

以下是电子邮件的样子:

已创建帐户:

员工编号:987333
第一名:比尔
最后:沃尔什
用户名:bwalsh
密码:67&&8^.!

员工必须尽快更改其电子邮件密码。 密码每 90 天过期一次,并且必须包含 8 个字符或更多字符(带有 至少一个大写字母、一个小写字母和一个数字或符号)。笔记: 此密码也是访问 Google 电子邮件的密码。

如果您需要帮助,请联系您所在地区的技术人员 支持团队或 HELP IT 帮助台 998-9999 或通过电子邮件发送至 helpdesk@help.net。

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


【解决方案1】:

该错误是因为您的 getGmail() 函数返回一个二维数组,其中每个子数组中的第一个值是日期,第二个值是文本字符串。要访问文本字符串,您需要通过索引1 引用它,如下所示:

   messages.forEach(message => { curSheet.appendRow(parseEmail(message[1])) });

但完全删除上述行并在getGmail() 中运行解析函数可能更有意义,如下所示:

    messages.push([m.getDate(), parseEmail(m.getPlainBody())]);

【讨论】:

  • 好的 - 错误消失了,但现在 - 电子邮件被输入到工作表中两次。第一次在 A 列中输入日期,然后在 B 列中输入正文的其余部分。第二次输入数据时,它将电子邮件正确解析到每一列 - 除了 A 列中没有日期,但文本从电子邮件“已创建帐户:”的开头开始。有任何想法吗?
猜你喜欢
  • 2022-07-06
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 2019-03-03
  • 2017-03-27
  • 2023-03-05
  • 1970-01-01
  • 2018-11-16
相关资源
最近更新 更多