【发布时间】:2021-05-31 03:17:28
【问题描述】:
我是谷歌脚本的新手。
我一直在尝试根据从电子邮件主题中提取的特定 ID 或数字自动为我从供应商处收到的电子邮件添加子标签。
例如,电子邮件主题是“供应商 A(供应商 ID:12349)”。因此,在父标签“供应商”下,我试图将 12349 作为引用该特定 ID 的线程或消息的子标签。一旦 Gmail 收到主题内的新 ID,就会自动创建子标签,并且会自动使用已创建的子标签 ID 标记新传入的电子邮件。
我通过参考其他论坛主题尝试了很多事情,但没有一个有效。我想我能得到的最接近的方法是让脚本引用工作表中的某一列,我用它来提取 ID 号并根据该特定行创建标签。但是,我不断收到错误,因为 GmailApp.createLabel("") 需要 ("") 中的名称/字符串。
以下是目前的脚本:
//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]);
}
}
}
这是我用来创建标签的方法,但有错误:
Logger.log("label: " + GmailApp.createLabel(row));
错误:Exception: Invalid argument: name + 运行后在 gmail 中未创建标签
Exception: Invalid argument: name (Message Details)
那么无论如何我可以做到这一点吗?或者还有其他我可能错过的方法吗?
如果有人可以帮助我,我将不胜感激。
【问题讨论】:
-
如何调用 parseLabel()。你没有提供任何例子。我也认为这个
Logger.log("label: " + GmailApp.createLabel(row));应该是这个Logger.log("label: " + GmailApp.createLabel(row)).getName(); -
你能定义你得到的错误吗?
-
@Cooper parseLabel()?你的意思是 parseEmail()?如果是这样,我已经编辑了脚本的上半部分以显示我所做的当前脚本。我也试过你提到的方法,当我试图在谷歌表上收集电子邮件时出现同样的错误(异常:无效参数:名称)
-
@RafaGuillermo 我得到的错误是“异常:无效参数:名称”。当我尝试将电子邮件收集到电子表格中时,它出现在页面顶部。虽然,当我在脚本编辑器中运行脚本时没有检测到错误..
-
@Cooper 抱歉,我不太明白你的问题?但是,如果您需要我更具体地说明错误。我在问题中添加了错误图片
标签: google-apps-script google-sheets gmail label