【发布时间】:2017-04-07 23:32:17
【问题描述】:
我想为某些参数集制作一个 gmail 原生的过滤器。
基本上,我经常使用 google 别名功能(您的电子邮件后面的 + 号)。我想自动化创建过滤器的过程,该过滤器读取“To”行然后查找“+”。如果找到“+”,它将为“+”之后的内容制作标签。然后它将创建一个专用/本机过滤器,该过滤器将:跳过收件箱并应用“+”之后的标签。
我查看了 gmail 脚本,但没有找到制作本机过滤器的方法。我了解此功能可能刚刚实现。
function getTo() {
// Log the To line of up to the first 50 emails in your Inbox
var email = Session.getActiveUser().getEmail();
Logger.log(email);
var threads = GmailApp.getInboxThreads(0, 50);
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
Logger.log(messages[j].getTo()||email);
}
}
}
任何帮助都会很棒。
解决方案:
// Creates a filter to put all email from ${toAddress} into
// Gmail label ${labelName}
function createToFilter(toAddress, labelName) {
// Lists all the filters for the user running the script, 'me'
var labels = Gmail.Users.Settings.Filters.list('me')
// Search through the existing filters for ${toAddress}
var label = true
labels.filter.forEach(function(l) {
if (l.criteria.to === toAddress) {
label = null
}
})
// If the filter does exist, return
if (label === null) return
else {
// Create the new label
GmailApp.createLabel(labelName)
// Lists all the labels for the user running the script, 'me'
var labelids = Gmail.Users.Labels.list('me')
// Search through the existing labels for ${labelName}
// this operation is still needed to get the label ID
var labelid = false
labelids.labels.forEach(function(a) {
if (a.name === labelName) {
labelid = a
}
})
Logger.log(labelid);
Logger.log(labelid.id);
// Create a new filter object (really just POD)
var filter = Gmail.newFilter()
// Make the filter activate when the to address is ${toAddress}
filter.criteria = Gmail.newFilterCriteria()
filter.criteria.to = toAddress
// Make the filter remove the label id of ${"INBOX"}
filter.action = Gmail.newFilterAction()
filter.action.removeLabelIds = ["INBOX"];
// Make the filter apply the label id of ${labelName}
filter.action.addLabelIds = [labelid.id];
// Add the filter to the user's ('me') settings
Gmail.Users.Settings.Filters.create(filter, 'me')
}
}
谢谢,安德
【问题讨论】:
-
您希望它现在通过您的收件箱运行吗?或者当电子邮件进来时?到目前为止,您尝试了哪些代码?
-
所以我希望它经常运行以查找尚未过滤的新电子邮件。本机过滤器应该一直在运行。我在高级功能中发现了一些过滤器设置:developers.google.com/gmail/api/v1/reference/users/settings/…
-
我正在测试.getTo。我试图消除我的电子邮件和要检查的电子邮件之间的区别。不同之处在于标签。然后,一旦我有了我想要的标签,我就会制作过滤器。我还没有尝试制作过滤器。
-
function getsubject() { // 记录收件箱中前 50 封电子邮件的主题行 var email = Session.getActiveUser().getEmail(); Logger.log(电子邮件); var 线程 = GmailApp.getInboxThreads(0, 10); for (var i = 0; i
标签: google-apps-script gmail gmail-api