Gmail Api / GmailApp Apps Script 有什么方法可以在有人回复邮件时标记邮件吗?
Gmail Api / GmailApp Apps Script Is there any way to tag a message when someone is replying to it?
我们在使用同一帐户的几个人之间共享一个收件箱,有时我们会回复相同的邮件 2/3 次,我们解决了这个手动标记将要回复的邮件的问题,但如果有自动的东西。
我考虑过监控最近生成的 10 个草稿,使用草稿内部日期标记具有相同主题的邮件:
var draftDate = Gmail.Users.Drafts.get('me','r-3713120909044645691').message.internalDate
发送后删除它们并从监视队列中取消选中它们。但是我想不出别的办法。
我创建了一个 getLastMails() 函数来搜索最后 10 个 Mailthreads 中最后一条消息的标签,如果它找到任何草稿,它会将它们标记为“REPLYING”,如果它找到标记为“REPLYING”的邮件而且它们不是草稿,它会删除标签。
我现在遇到的问题是每次回复前都要刷新邮件,看看标记的邮件有没有变化。
我不知道它在配额限制方面的效率如何。
function getLastMails() {
var mails = Gmail.Users.Messages.list('me')['messages'].forEach((message, i) => {
if (i<10) {
var messageObj = Gmail.Users.Messages.get('me', message.id)
var messageId = message.id
var labels = messageObj.labelIds
if(labels.includes("DRAFT")){
var gappMessage =GmailApp.getMessageById(messageId)
GmailApp.starMessage(gappMessage)
editLabel(message.id, "REPLYING")
//GmailApp.refreshThreads
}
if(labels.includes(getLabelByName("REPLYING",'id'))&&!labels.includes("DRAFT")) {
var gappMessage =GmailApp.getMessageById(messageId)
GmailApp.unstarMessage(gappMessage)
editLabel(message.id,'',"REPLYING")
//GmailApp.refreshThreads
}
}
})
}
function getLabel(label_){
var label = GmailApp.getUserLabelByName(label_);
return label || GmailApp.createLabel(label_);
}
function getLabelByName(name,field){
var label_ = getLabel(name);
return Gmail.Users.Labels.list('me')['labels'].filter( lab => lab.name == name )[0][field]
}
function editLabel(idMail, labelAdd = "", labelRemove = "" ) {
labelRemove = (labelRemove == "") ? [] : [getLabelByName(labelRemove,'id')];
labelAdd = (labelAdd == "") ? []: [getLabelByName(labelAdd,'id')];
Gmail.Users.Messages.modify({
"addLabelIds": labelAdd ,
"removeLabelIds": labelRemove
}, 'me',idMail);
}
我们在使用同一帐户的几个人之间共享一个收件箱,有时我们会回复相同的邮件 2/3 次,我们解决了这个手动标记将要回复的邮件的问题,但如果有自动的东西。
我考虑过监控最近生成的 10 个草稿,使用草稿内部日期标记具有相同主题的邮件:
var draftDate = Gmail.Users.Drafts.get('me','r-3713120909044645691').message.internalDate
发送后删除它们并从监视队列中取消选中它们。但是我想不出别的办法。
我创建了一个 getLastMails() 函数来搜索最后 10 个 Mailthreads 中最后一条消息的标签,如果它找到任何草稿,它会将它们标记为“REPLYING”,如果它找到标记为“REPLYING”的邮件而且它们不是草稿,它会删除标签。 我现在遇到的问题是每次回复前都要刷新邮件,看看标记的邮件有没有变化。
我不知道它在配额限制方面的效率如何。
function getLastMails() {
var mails = Gmail.Users.Messages.list('me')['messages'].forEach((message, i) => {
if (i<10) {
var messageObj = Gmail.Users.Messages.get('me', message.id)
var messageId = message.id
var labels = messageObj.labelIds
if(labels.includes("DRAFT")){
var gappMessage =GmailApp.getMessageById(messageId)
GmailApp.starMessage(gappMessage)
editLabel(message.id, "REPLYING")
//GmailApp.refreshThreads
}
if(labels.includes(getLabelByName("REPLYING",'id'))&&!labels.includes("DRAFT")) {
var gappMessage =GmailApp.getMessageById(messageId)
GmailApp.unstarMessage(gappMessage)
editLabel(message.id,'',"REPLYING")
//GmailApp.refreshThreads
}
}
})
}
function getLabel(label_){
var label = GmailApp.getUserLabelByName(label_);
return label || GmailApp.createLabel(label_);
}
function getLabelByName(name,field){
var label_ = getLabel(name);
return Gmail.Users.Labels.list('me')['labels'].filter( lab => lab.name == name )[0][field]
}
function editLabel(idMail, labelAdd = "", labelRemove = "" ) {
labelRemove = (labelRemove == "") ? [] : [getLabelByName(labelRemove,'id')];
labelAdd = (labelAdd == "") ? []: [getLabelByName(labelAdd,'id')];
Gmail.Users.Messages.modify({
"addLabelIds": labelAdd ,
"removeLabelIds": labelRemove
}, 'me',idMail);
}