Google apps script 根据电子邮件主题中提取的子字符串自动创建Gmail子标签(Google脚本)
我不熟悉谷歌脚本 我一直在尝试根据电子邮件主题中提取的特定ID或数字自动对从供应商处收到的电子邮件进行子标签 例如,电子邮件主题为“供应商A(供应商ID:12349)”。因此,在父标签“Supplier”下,我试图将12349作为引用该特定ID的线程或消息的子标签。当Gmail在主题中收到新ID时,应自动创建子标签,并使用已创建的子标签ID自动标记新收到的电子邮件 我参考了其他论坛的帖子,尝试了很多东西,但没有一个是有效的。我认为最接近的方法是让脚本引用工作表中的某一列,我使用该列提取ID号并基于该特定行创建标签。但是,我不断收到错误,因为GmailApp.createLabel(“”)需要(“”)中的name/string 以下是目前为止的脚本:Google apps script 根据电子邮件主题中提取的子字符串自动创建Gmail子标签(Google脚本),google-apps-script,google-sheets,gmail,label,Google Apps Script,Google Sheets,Gmail,Label,我不熟悉谷歌脚本 我一直在尝试根据电子邮件主题中提取的特定ID或数字自动对从供应商处收到的电子邮件进行子标签 例如,电子邮件主题为“供应商A(供应商ID:12349)”。因此,在父标签“Supplier”下,我试图将12349作为引用该特定ID的线程或消息的子标签。当Gmail在主题中收到新ID时,应自动创建子标签,并使用已创建的子标签ID自动标记新收到的电子邮件 我参考了其他论坛的帖子,尝试了很多东西,但没有一个是有效的。我认为最接近的方法是让脚本引用工作表中的某一列,我使用该列提取ID号并基
//retrieve gmail messages
function GatherEmails() {
let messages = getGmail();
let curSheet = SpreadsheetApp.getActive().getSheetByName('SupplierEmails');
messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}
function getGmail() {
const query = "NOT label:Bounced/Out of Office";
let threads = GmailApp.search(query);
let label = GmailApp.getUserLabelByName("Supplier");
let messages = [];
threads.forEach(thread => {
messages.push(thread.getMessages()[0].getPlainBody());
});
return messages;
}
//call cell value by column (Sheet: "Supplier Labels")
function callLabelcolum()
{
var ss1=SpreadsheetApp.getActive();
var sh=ss1.getSheetByName("Supplier Labels");
var rg=sh.getDataRange();
var vA=rg.getValues();
var hA=vA[0];
for(var i=1;i<vA.length;i++)
{
var row="";
for(var j=0;j<vA[0].length;j++)
{
row[hA[j]]=vA[i][j];
}
Logger.log('Label: %s',row.Label);
}
}
//parse & label the email massage
function parseEmail(messages, row) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("SupplierEmails");
var threads = GmailApp.search('');
for (var i = 0; i < threads.length; i++){
var msg = threads[i].getMessages();
for (var j = 0; j < msg.length; j++){
// Get same thread by its ID.
var threadID = GmailApp.getThreadById(msg[j].getId());
// Logs the permalink for the first thread in the inbox
var thrd = GmailApp.getInboxThreads(0,1)[0];
var link = thrd.getPermalink();
var date = msg[j].getDate();
var from = msg[j].getFrom();
var subj = msg[j].getSubject();
var pmsg = msg[j].getPlainBody();
var msgid = msg[j].getId();
var msglink = "https://mail.google.com/mail/u/0/#inbox/"+msg[j].getId();
// Creates the label and logs label: callLabel()
Logger.log("label: " + GmailApp.createLabel(row));
sheet.appendRow([from, msgid, subj, msglink]);
}
}
}
错误:+运行后没有在gmail中创建标签
那么,我有没有办法把这件事做好?或者还有其他我可能错过的方法吗
如果有人能在这方面帮助我,我将不胜感激。以下是我在发现方法问题后所做的 只是为了澄清,创建的标签只是基于单元格值的空标签,因此没有分配线程或过滤器。然而,它确实解决了我遇到的错误
function callLabelcolumn()
{
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('Supplier Labels');
var rg=sh.getRange('A2:A');
var vA=rg.getValues();
vA.forEach(function(row) {
if(row != "" && row != "#N/A"){
Logger.log('Label: %s', row);
var label = GmailApp.createLabel(row);
Logger.log("label: " + label);
}
parseLabel()是如何调用的。您没有提供任何示例。我还认为这
Logger.log(“label:+GmailApp.createLabel(row))
可能是这个Logger.log(“标签:+GmailApp.createLabel(行)).getName()代码>你能定义你得到的错误吗?@Cooper parseLabel()?你是说parseEmail()?如果是这样,我已经编辑了脚本的上半部分,以显示我所做的当前脚本。我也尝试过你提到的方法,当我试图在google sheet上收集电子邮件时也会发生同样的错误(例外:无效参数:name)@RafaGuillermo我得到的错误是“例外:无效参数:name”。当我试图将电子邮件收集到电子表格中时,它出现在页面顶部。虽然,在脚本编辑器中运行脚本时未检测到错误。@Cooper抱歉,我不太理解您的问题?但是如果你需要我更具体地说明错误。。我在我的问题中添加了一幅关于错误的图片
function callLabelcolumn()
{
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('Supplier Labels');
var rg=sh.getRange('A2:A');
var vA=rg.getValues();
vA.forEach(function(row) {
if(row != "" && row != "#N/A"){
Logger.log('Label: %s', row);
var label = GmailApp.createLabel(row);
Logger.log("label: " + label);
}