google-apps-script - GmailApp.getMessagesForThreads() 返回太多消息
问题描述
我想在我的 Gmail 帐户中返回指定日期收到的所有电子邮件主题的列表。如果有多条消息具有相同的主题,我想知道有多少条。这就是我所做的:
var emailThreads = GmailApp.search("subject:<partial_subject> after:2020/8/30 before:2020/8/31");
var messages = GmailApp.getMessagesForThreads(emailThreads);
这将返回“消息数组的数组,其中外部数组中的每个项目对应于一个线程,而内部数组包含该线程中的消息”。
我尝试像这样访问我需要的数据:
for (i = 0; i < messages.length; i++) {
messages[i][0].getSubject() // a subject
messages[i].length // number of messages with the same subject
}
但是,这会返回比 Gmail UI 中显示的更多的邮件。
这是我注意到的:
- 它只发生在具有多条消息的线程上
- 它不会发生在具有多条消息的所有线程上
- 每次在同一天运行我的脚本,结果都是一样的
- 当我在不同的日子运行我的脚本时,即使收到相同的电子邮件,结果也会不同
考虑到这段代码非常简单,而且我只使用谷歌提供的方法,我想我一定误解了一些东西,或者 Gmail 对线程中的消息做了一些奇怪的事情。
任何想法这可能是什么以及如何解决它?
编辑:我注意到 gmail 过滤器中有一个“不包括聊天”复选框,它将“-in:chats”添加到搜索查询中,但它也没有帮助。我还尝试在查询中添加“in:inbox”,但结果没有变化。
解决方案
解释:
您收到太多消息的原因是您当前的过滤条件不仅查询电子邮件,还查询环聊消息或其他线程,而不是电子邮件。
使用它来获取所有电子邮件的主题:
var emailThreads = GmailApp.search("is:inbox after:2020/8/30 before:2020/8/31");
解决方案:
这是完整代码的样子:
function myFunction() {
var emailThreads = GmailApp.search("is:inbox after:2020/8/30 before:2020/8/31");
var messages = GmailApp.getMessagesForThreads(emailThreads);
var messageArr = [];
for (i = 0; i < messages.length; i++) {
Logger.log(messages[i][0].getSubject()) // a subject
Logger.log(messages[i].length) // number of messages with the same subject
}
messages.forEach(m=>{
messageArr.push({
subject: m[0].getSubject(),
num_messages:m.length
})});
}
- 我还为您创建了一个 json 数组
messageArr
,其中包含所有主题名称和每个主题的消息数量。
推荐阅读
- amazon-web-services - AWS 目录服务不使用私有 IP 地址解析 VPC 中的资源
- c++ - 在 Qt Creator 中将 Lua 与 C++ 链接
- debugging - 调试 st.executeUpdate(sql);
- json - 字符串以 TextIOWrapper 的形式出现,而不是使用 ast.literal_eval() 函数的字符串
- java - CountDownTimer 适用于 Android Studio,不适用于设备
- visual-studio - Xamarin 文件加载错误
- shell - 强制 GNU make 使用特定的 shell
- python - 保存 pd.DataFrame 时如何强制 parquet dtypes?
- c# - 泛型 List<> 类型的扩展方法
- java - 我的神经网络有更好的激活函数吗?