从Gmail(Java Android)获取最近20封电子邮件

时间:2016-06-25 09:52:05

标签: java android email gmail-api

如何从gmail收到最近20封电子邮件?

  ListMessagesResponse listMessagesResponse = mService.users().messages()
                    .list(user).setQ("from:----")
                    .execute();

目前我正在使用它,但它返回没有任何有效负载的消息ID。我想通过正文获得完整的电子邮件。是否可以获取特定发件人的最新电子邮件?

2 个答案:

答案 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();
  ...
}

检查他们的文档,他们有一些可能有用的示例。

List Messages

Get Concrete Message