gpt4 book ai didi

gmail-api - 获取新消息的最有效方式

转载 作者:行者123 更新时间:2023-12-04 14:27:03 24 4
gpt4 key购买 nike

我有一个在用户 Gmail 中查找新邮件的过程。如果消息满足特定地址条件,则会将其添加到外部数据库中。

我们一直在使用 Users.History.List,它返回对它们进行了更改的所有消息。这是非常低效的,因为我们必须随后检查每条消息以查看我们是否已经处理过它。

我们正在考虑使用 Users.Messages.List 并检查 MsgId 以查看它是否大于之前的检查(我们从中存储 Id)。这里的假设是 MsgId 会不断变大。这种方法有缺陷吗?其他人在做什么?

非常感谢。

最佳答案

这是一个如何仅获取新消息的示例(使用 Java 客户端 api)

List<History> histories = new ArrayList<History>();
ListHistoryResponse response = service.users().history().list(userUID).setStartHistoryId(startHistoryId).execute();

//get all history events and not only the first page
while (response.getHistory() != null) {
histories.addAll(response.getHistory());
if (response.getNextPageToken() != null) {
String pageToken = response.getNextPageToken();
response = service.users().history().list(userUID)
.setPageToken(pageToken)
.setStartHistoryId(startHistoryId).execute();
} else {
break;
}
}

//for each history element find the added messages
for (History history : histories) {
List<HistoryMessageAdded> addedMessages = history.getMessagesAdded();

if (addedMessages == null){
continue;
}

//call to message.get for each HistoryMessageAdded
for (HistoryMessageAdded addedMsg : addedMessages) {
Message message = addedMsg.getMessage();
Message rawMessage = service.users().messages().get(userUID, message.getId()).setFormat("raw").execute();

}
}

其他语言/REST API 中可能有类似的实现。

您可以使用其他历史事件,例如:messagesDeleted、labelsAdded 和 labelsRemoved
引用:
https://developers.google.com/gmail/api/v1/reference/users/history/list

关于gmail-api - 获取新消息的最有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com