【问题标题】: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();
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-04
        • 2022-06-18
        • 2020-08-02
        • 1970-01-01
        • 2017-05-15
        • 2018-01-30
        相关资源
        最近更新 更多