大数跨境

在 Google 表格中捕获 Gmail 邮件

在 Google 表格中捕获 Gmail 邮件 电商实践
2020-04-22
2
导读:借助 Google Apps Script,营销人员可以捕获 Gmail 邮件,解析其中的相关信息,并逐行将其添加到 Google 电子表格中。这在捕获潜在客户或联系人时尤其有用。

借助 Google Apps Script,营销人员可自动捕获 Gmail 邮件、解析关键信息并逐行录入 Google Sheets,这在潜在客户或联系人收集场景中尤为实用。

以电商企业与慈善机构合作为例:参与者通过对方网站提交提案,但由于该网站基于老旧专有平台构建,数据无法存入数据库,仅能以纯文本邮件形式发送。此时,利用脚本将邮件内容解析并同步至 Google Sheet,即可实现高效管理。

创建表格与脚本

首先新建 Google Sheet,命名为“Charity Email Example”。

从一个新的 Google Sheet 开始。

点击菜单栏“工具”>“脚本编辑器”,打开脚本开发环境,并将项目命名为“Charity Email Example”。此处用于编写在电子表格中运行的 JavaScript 函数。

通过“脚本编辑器”将 Google 电子表格与自定义脚本关联起来。

使用脚本编辑器编写在电子表格上运行的 JavaScript 函数。

本示例将通过四个核心函数实现自动化:onOpen、gather、getGmail 和 parseEmail。

onOpen:初始化菜单

onOpen 是 Google Apps Script 的保留函数,每次打开电子表格时自动执行。我们利用它在表格中添加自定义菜单。

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

代码逻辑如下:

  • 获取当前活动电子表格对象;
  • 定义菜单项数组,指定显示名称及对应回调函数(此处为 gather);
  • 调用 addMenu 方法添加菜单。

在脚本编辑器中点击运行按钮(黑色三角形),或刷新电子表格即可触发。首次运行需授权访问 Google 账户权限。

运行按钮允许我们在脚本编辑器中执行选定的函数。

授予脚本访问您的 Google 账户的权限。

执行成功后,电子表格顶部将出现“Charity”菜单及“Gather emails”选项。

电子表格上会出现一个新菜单和菜单项。

gather:主流程控制

gather 函数负责协调数据获取与写入。

function gather() {
  let messages = getGmail();
  let curSheet = SpreadsheetApp.getActive();
  messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}

其执行三步操作:

  1. 调用 getGmail 获取目标邮件列表;
  2. 获取当前活动工作表对象;
  3. 遍历每条消息,经 parseEmail 处理后追加至表格末尾。

其中 appendRow 接收数组参数,由 parseEmail 返回格式化后的数据行。

getGmail:检索并标记邮件

此函数完成邮件搜索与防重复处理。

function getGmail() {
  const query = "from:a@e.com AND subject:Charity Example NOT label:done";
  let threads = GmailApp.search(query);
  let label = GmailApp.getUserLabelByName("done");
  if (!label) {label = GmailApp.createLabel("done")}
  let messages = [];
  threads.forEach(thread => {
    messages.push(thread.getMessages()[0].getPlainBody());
    label.addToThread(thread);
  });
  return messages;
}

关键点说明:

  • 搜索条件:限定发件人、主题,并排除已标记“done”的邮件,避免重复处理;
  • 批量优化:若邮件量大,可使用 GmailApp.search(query, 0, 10) 分批获取提升性能;
  • 标签管理:自动创建或获取“done”标签,并在读取后为对应会话打标,确保下次运行时跳过已处理邮件;
  • 数据提取:取每个会话的首条消息纯文本内容,存入数组并返回。

该搜索查询字符串与 Gmail 中的高级搜索完全相同。

parseEmail:解析纯文本内容

针对固定格式的纯文本邮件,使用正则表达式清洗并结构化数据。原始邮件示例:

date: Thu, April 16, 2020
first_name: Olga
last_name: Razcok
email: oraxcok@example.com
phone: 202-456-1111
ip: 35.138.107.243
comment: I would really like to participate in this program.
fav_color: brown

推荐使用 Regex Pal 等工具验证正则表达式匹配效果。

Regex Pal 可以让您查看某个特定的正则表达式将匹配哪些文本部分。

逐步处理逻辑:

  1. 移除日期中的逗号防止分隔符冲突:.replace(/,/g,'')
  2. 删除换行符及冒号前缀字段名,转为逗号分隔格式:.replace(/\n*.+:/g,',')
  3. 清除开头多余逗号:.replace(/^,/,'')
  4. 去除剩余换行符:.replace(/\n/g,'')
  5. 按逗号分割为数组:.split(',')

此时得到完整字段数组,但包含不需要的 IP 地址和偏好颜色等信息。可通过索引映射筛选有效数据:

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

索引对应关系:

  • 0: 日期
  • 1: 名字
  • 2: 姓氏
  • 3: 邮箱
  • 4: 电话
  • 5: IP(跳过)
  • 6: 评论
  • 7: 偏好颜色(跳过)

完整函数如下:

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;
}

实际效果

当点击“Gather emails”菜单项时,脚本会自动拉取未处理的慈善邮件,解析关键字段并新增一行至表格。

该脚本向电子表格添加了一行。每当点击“收集电子邮件”菜单项时,它都会为慈善机构发送的每封电子邮件添加一行。

【声明】内容源于网络
0
0
电商实践
电商实践
内容 8053
粉丝 0
电商实践 电商实践
总阅读37.4k
粉丝0
内容8.1k