如何解决根据电子邮件主题中提取的子字符串自动创建 Gmail 子标签Google Script
我是谷歌脚本的新手。
我一直在尝试根据在电子邮件主题中提取的特定 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)
所以无论如何我能做到这一点吗?或者有没有我可能错过的其他方法?
如果有人能帮助我,我将不胜感激。
解决方法
这是我发现方法问题后所做的。
澄清一下,创建的标签只是基于单元格值的空标签,因此没有分配线程或过滤器。但是,它确实解决了我遇到的错误。
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。