Google Apps 脚本 - 将 Gmail 中的数据提取到电子表格中
Google Apps Scripts - Extract data from gmail into a spreadsheet
这是我尝试从头开始编写的第一个脚本。到现在一直不行,所以我要寻求一些帮助。
案例:我收到来自电子商务网站的电子商务确认电子邮件,没有回复电子邮件地址。在电子邮件的正文中,他们会发送买家的电子邮件地址。我想向主体的电子邮件地址发送一封自动邮件。
我打算如何执行此操作(将感谢任何消除步骤的建议)。
使用规则为传入的电子邮件添加唯一标签。
使用该标签通过脚本识别 gmail 中的电子邮件,一个一个地提取我需要的信息。使用带有电子邮件正文内容的正则表达式来提取我发送自动电子邮件所需的电子邮件地址。计划是从正文中获取:主题、日期、电子邮件。
将所有信息写入电子表格。
删除唯一标签信息以防止重复运行。
然后使用 form mule 插件从电子表格发送电子邮件。
到目前为止,我已经完成了第 1 步(简单),并且一直在努力完成第 2 步和第 3 步(我不是编码员,我可以阅读、理解和破解。从头开始编写是完全不同的事情) .在我认为这是处理它的最佳方法之前,我已经处理过 4 个。
我使用脚本将信息提取到电子表格,使用插件我使用电子表格中的信息发送电子邮件。
这是我到目前为止编写的代码。我已经离开了正则表达式部分以备后用,因为我什至无法在电子表格中写入任何内容。一旦我开始工作,我就会开始在正则表达式和脚本的 "remove the label" 方面工作。
function myFunction() {
function getemails() {
var label = GmailApp.getUserLabelByName("Main tag/subtag");
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var messages=threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message=messages[j];
var subject=message.getSubject();
tosp(message);
}
}
}
function tosp(message){
var body=message.getBody()
var date=message.getDate();
var subject=message.getSubject();
var id= "my spreasheet id";
var ss = SpreadsheetApp.openById(id);
var sheet = ss.getActiveSheet();
sheet.appendRow(subject,date,body);
}
}
如有任何帮助,我们将不胜感激。
谢谢
塞巴斯蒂安
以下是我编写和测试的代码,可以很好地执行您提到的步骤 2、3 和 4。
function myFunction() {
var ss = SpreadsheetApp.getActiveSheet();
var label = GmailApp.getUserLabelByName("MyLabel");
var threads = label.getThreads();
for (var i=0; i<threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j=0; j<messages.length; j++)
{
var msg = messages[j].getBody();
var sub = messages[j].getSubject();
var dat = messages[j].getDate();
ss.appendRow([msg, sub, dat])
}
threads[i].removeLabel(label);
}
}
您的代码中的一个错误是 appendRow
函数接受在 [ ]
括号内指定的元素数组。
根据您附加此脚本的位置,您的代码行:
var ss = SpreadsheetApp.openById(id);
如果脚本是在您希望记录这些电子邮件的电子表格的脚本编辑器中编写的,则不需要。但是,如果该电子表格中有多个工作表,您可以替换我的行
var ss = SpreadsheetApp.getActiveSheet();
来自
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
另一个建议是,当前代码将以 HTML 格式为您提供消息。因此,如果您想以纯文本形式获取消息,请使用:
var msg = messages[i].getPlainBody();
现在您可以为正则表达式编写另一个函数并将消息 msg
传递给它。希望这对您有所帮助!
我制作了一个 ready-to-use 脚本,并为那些需要更多帮助的人解释了如何(从头开始)使用它。
它在 gmail-to-google-sheets-script 存储库中。只需阅读内容并按照说明操作即可。
如何使用
- 新建一个GoogleSheet
- 访问菜单工具 > 脚本编辑器
- 将 gmailt-to-sheets.gs 中的内容复制到编辑器,替换那里的示例代码
- 将
SEARCH_QUERY
上的值替换为您的真实查询(首先在 gmail 上搜索,复制并粘贴搜索词)
- Select
saveEmails
在菜单上(靠近“运行”和“调试”按钮)
- 点击“运行”按钮
- 它首先会要求授权运行,然后接受它(这是您的Gmail帐户授权您的Google脚本帐户)
- 运行之后,结果会应用到你身上sheet
更改字段
如果您想保存不同的消息属性,请查看gmail-message class并用✏️(铅笔)更改您的脚本文件下面注释的代码。
这是我尝试从头开始编写的第一个脚本。到现在一直不行,所以我要寻求一些帮助。
案例:我收到来自电子商务网站的电子商务确认电子邮件,没有回复电子邮件地址。在电子邮件的正文中,他们会发送买家的电子邮件地址。我想向主体的电子邮件地址发送一封自动邮件。
我打算如何执行此操作(将感谢任何消除步骤的建议)。
使用规则为传入的电子邮件添加唯一标签。
使用该标签通过脚本识别 gmail 中的电子邮件,一个一个地提取我需要的信息。使用带有电子邮件正文内容的正则表达式来提取我发送自动电子邮件所需的电子邮件地址。计划是从正文中获取:主题、日期、电子邮件。
将所有信息写入电子表格。
删除唯一标签信息以防止重复运行。
然后使用 form mule 插件从电子表格发送电子邮件。
到目前为止,我已经完成了第 1 步(简单),并且一直在努力完成第 2 步和第 3 步(我不是编码员,我可以阅读、理解和破解。从头开始编写是完全不同的事情) .在我认为这是处理它的最佳方法之前,我已经处理过 4 个。
我使用脚本将信息提取到电子表格,使用插件我使用电子表格中的信息发送电子邮件。
这是我到目前为止编写的代码。我已经离开了正则表达式部分以备后用,因为我什至无法在电子表格中写入任何内容。一旦我开始工作,我就会开始在正则表达式和脚本的 "remove the label" 方面工作。
function myFunction() {
function getemails() {
var label = GmailApp.getUserLabelByName("Main tag/subtag");
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var messages=threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message=messages[j];
var subject=message.getSubject();
tosp(message);
}
}
}
function tosp(message){
var body=message.getBody()
var date=message.getDate();
var subject=message.getSubject();
var id= "my spreasheet id";
var ss = SpreadsheetApp.openById(id);
var sheet = ss.getActiveSheet();
sheet.appendRow(subject,date,body);
}
}
如有任何帮助,我们将不胜感激。
谢谢 塞巴斯蒂安
以下是我编写和测试的代码,可以很好地执行您提到的步骤 2、3 和 4。
function myFunction() {
var ss = SpreadsheetApp.getActiveSheet();
var label = GmailApp.getUserLabelByName("MyLabel");
var threads = label.getThreads();
for (var i=0; i<threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j=0; j<messages.length; j++)
{
var msg = messages[j].getBody();
var sub = messages[j].getSubject();
var dat = messages[j].getDate();
ss.appendRow([msg, sub, dat])
}
threads[i].removeLabel(label);
}
}
您的代码中的一个错误是 appendRow
函数接受在 [ ]
括号内指定的元素数组。
根据您附加此脚本的位置,您的代码行:
var ss = SpreadsheetApp.openById(id);
如果脚本是在您希望记录这些电子邮件的电子表格的脚本编辑器中编写的,则不需要。但是,如果该电子表格中有多个工作表,您可以替换我的行
var ss = SpreadsheetApp.getActiveSheet();
来自
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
另一个建议是,当前代码将以 HTML 格式为您提供消息。因此,如果您想以纯文本形式获取消息,请使用:
var msg = messages[i].getPlainBody();
现在您可以为正则表达式编写另一个函数并将消息 msg
传递给它。希望这对您有所帮助!
我制作了一个 ready-to-use 脚本,并为那些需要更多帮助的人解释了如何(从头开始)使用它。
它在 gmail-to-google-sheets-script 存储库中。只需阅读内容并按照说明操作即可。
如何使用
- 新建一个GoogleSheet
- 访问菜单工具 > 脚本编辑器
- 将 gmailt-to-sheets.gs 中的内容复制到编辑器,替换那里的示例代码
- 将
SEARCH_QUERY
上的值替换为您的真实查询(首先在 gmail 上搜索,复制并粘贴搜索词) - Select
saveEmails
在菜单上(靠近“运行”和“调试”按钮) - 点击“运行”按钮
- 它首先会要求授权运行,然后接受它(这是您的Gmail帐户授权您的Google脚本帐户)
- 运行之后,结果会应用到你身上sheet
更改字段
如果您想保存不同的消息属性,请查看gmail-message class并用✏️(铅笔)更改您的脚本文件下面注释的代码。