根据一个特定主题,我试图获取昨天的电子邮件。 通常,我在午夜时分做的事情我会计算特定主题的电子邮件数量,并通过Google脚本发送邮件。在3点钟,我触发一个删除触发器,开始删除前一天的邮件。 所以,我确保前一天没有任何邮件。
var yesterday = "2017/7/10";
var today = "2017/7/11";
var query = "after:"+yesterday+" before:"+today+" subject: abcd";
不计算我在函数
下面写的电子邮件function getEmailCount(query) {
var threads = GmailApp.search(query, 0, 500);
Logger.log(threads);
var total = 0;
for (var i = 0; i < threads.length; i++) {
var messagesInThread = threads[i].getMessageCount();
var msg = threads[i].getMessages()[0].getSubject()
total = total + messagesInThread;
}
Logger.log(msg)
Logger.log("Query %s", query);
Logger.log("No. Of Threads %s", threads.length);
Logger.log("No. Of Emails %s", total);
return total;
}
当我使用上述主题检查Gmail中的电子邮件时,我只获得了8封,但我的脚本返回了25封邮件。任何帮助都将得到极大的帮助。
答案 0 :(得分:1)
有趣的是,GMailApp
确实会在Gmail网络应用不包含的搜索参数之外的线程内返回一些电子邮件。由于我正在查看的特定电子邮件的性质,我怀疑这是一个与时区相关的事情。
对您的代码进行一些修改可以添加一些检查,以区分原始结果和Web应用程序免费提供的一些UX。此外,这会过滤严格遵守搜索条件的线程和消息。
function getEmailCount(query) {
var yesterday = "2017/06/07",
today = "2017/06/08",
yesterdayDate = new Date(yesterday),
todayDate = new Date(today);
query = query || "after:" + yesterday + " before:" + today + "";
var threads = GmailApp.search(query).reduce(function(validThreads, thread, idx) {
var messages = thread.getMessages().reduce(function(messages, message, idx) {
var isChat = message.isInChats(),
isDeleted = message.isInTrash(),
sent = message.getDate();
if (!isDeleted && !isChat && sent < todayDate && sent > yesterdayDate) {
messages.push(message.getSubject());
}
return messages;
}, []);
if (messages.length > 0) { validThreads[idx] = messages; }
return validThreads;
}, {});
var totalMessages = Object.keys(threads).reduce(function(count, thread) {
return count += threads[thread].length;
}, 0);
Logger.log("Query: %s", query);
Logger.log("No. Of Threads: %s", Object.keys(threads).length);
Logger.log("No. Of Emails: %s", totalMessages);
return totalMessages;
}