【问题标题】:Get last 20 emails from Gmail (Java Android)获取来自 Gmail 的最后 20 封电子邮件(Java Android)
【发布时间】:2016-10-27 21:15:09
【问题描述】:
如何获取来自 gmail 的最后 20 封电子邮件?
ListMessagesResponse listMessagesResponse = mService.users().messages()
.list(user).setQ("from:----")
.execute();
目前我正在使用它,但它返回的消息 ID 没有任何有效负载。我想收到带有正文的完整电子邮件。是否可以像从特定发件人那里获取最新的电子邮件?
【问题讨论】:
标签:
java
android
email
gmail-api
【解决方案1】:
list 函数只返回带有基本详细信息的消息列表,通常只有 id。如果要获取有效负载或其他消息详细信息,则需要遍历使用list 提取的所有消息,并专门在所选对象上调用所需函数。我只有一些Java基础知识,但逻辑是这样的:
messages = listMessagesResponse.getMessages();
for (Message message : messages) {
payload = message.getPayload();
...
}
查看他们的文档,他们有一些有用的示例。
List Messages
Get Concrete Message
【解决方案2】:
正如@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();
希望这会有所帮助。