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

Get last 20 emails from Gmail (Java Android)

如何从 gmail 获取最近 20 封电子邮件?

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

目前我正在使用它,但它 returns 消息 ID 没有任何负载。我想获得带有正文的完整电子邮件。可以像从特定发件人那里获取最新的电子邮件吗?

仅列表功能 returns 具有基本详细信息的消息列表,通常只是 id。如果您想获取负载或其他消息详细信息,您需要遍历所有使用 list 提取的消息,并专门针对所选对象调用所需的函数。我对Java只有一些基础知识,但逻辑是这样的:

messages = listMessagesResponse.getMessages();
for (Message message : messages) {
  payload = message.getPayload();
  ...
}

查看他们的文档,他们有一些有用的示例。

List Messages

Get Concrete Message

正如@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();

希望对您有所帮助。