如何从gmail收到最近20封电子邮件?
ListMessagesResponse listMessagesResponse = mService.users().messages()
.list(user).setQ("from:----")
.execute();
目前我正在使用它,但它返回没有任何有效负载的消息ID。我想通过正文获得完整的电子邮件。是否可以获取特定发件人的最新电子邮件?
答案 0 :(得分:1)
正如@trajchevska指出的那样,你只能通过你的代码获得基本细节。要以完整格式获取消息,您应该为每条消息调用mService.users().messages().get(user, messageId).execute()
。最好的方法是创建批量调用。因此,如果您想获得与指定查询匹配的所有消息,您应该执行类似的操作。
final ListMessagesResponse response = mService.users().messages().list(user).setQ("from:----").execute();
final List<Message> messages = new ArrayList<Message>();
while (response.getMessages() != null) {
messages.addAll(response.getMessages());
if (response.getNextPageToken() != null) {
String pageToken = response.getNextPageToken();
response = service.users().messages().list(user).setQ("from:----").setPageToken(pageToken).execute();
} else {
break;
}
}
final List<Message> fullMessages = new ArrayList<>();
final JsonBatchCallback<Message> callback = new JsonBatchCallback<Message>() {
public void onSuccess(Message message, HttpHeaders responseHeaders) {
fullMessages.add(message);
}
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) {
// do what you want if error occurs
}
};
BatchRequest batch = mService.batch();
for (Message message : messages) {
mService.users().messages().get(user, message.getId()).setFormat("full").queue(batch, callback);
}
batch.execute();
希望这有帮助。
答案 1 :(得分:0)
list函数只返回带有基本详细信息的消息列表,这些详细信息通常只是id。如果要获取有效负载或其他消息详细信息,则需要迭代使用list
提取的所有消息,并在所选对象上专门调用所需函数。我只掌握一些Java基础知识,但逻辑是这样的:
messages = listMessagesResponse.getMessages();
for (Message message : messages) {
payload = message.getPayload();
...
}
检查他们的文档,他们有一些可能有用的示例。