如何使用 Java 使用 Gmail-API 解码消息的 headers?

How to I decode the headers of a message using Gmail-API using Java?

我正在 android 工作室处理片段,其目的是显示消息的 To/From、主题和 body。到目前为止,我能够检索、解码和显示 body。我尝试对 headers 使用类似的方法,但由于某种原因它没有正确解码,或者我的方法调用没有获得正确的信息。这是我正在使用的代码:

     String user = "me";
     String query = "in:inbox is:unread";
     textView.setText("Inbox");
     ListMessagesResponse messageResponse =
            mService.users().messages().list(user).setQ(query).setMaxResults(Long.valueOf(1)).execute();

        List<Message> messages = messageResponse.getMessages();

        for(Message message : messages){
            Message message2 = mService.users().messages().get(user, message.getId()).execute();

            //Get Headers
            byte[] headerBytes = Base64.decodeBase64(message2.getPayload().getParts().get(0).getHeaders().get(0).getName().toString().trim()); // get headers
            String header = new String(headerBytes, "UTF-8");

            //Get Body
            byte[] bodyBytes = Base64.decodeBase64(message2.getPayload().getParts().get(0).getBody().getData().trim().toString()); // get body
            String body = new String(bodyBytes, "UTF-8");

            messageList.add(header);
            messageList.add(body);
        }
        return messageList;

// get body 下的部分有效。但是 //Get Headers returns 数据下的部分带有奇怪的符号,其中包括带有白色问号的黑色菱形和随机排列的字母。我在 Base64.decodeBase64 语句中为 headerBytes 的方法调用尝试了许多不同的组合和顺序,但未能成功。有什么我想念的吗?

编辑:我查看了 google 开发者网站上的 gmail-api 文档,但我仍然对 header 信息的存储方式以及如何检索特定内容感到困惑,例如收件人、发件人和主题。这可能是我的问题,因为我可能没有瞄准正确的数据。

如果我list messages and get第一个,我们可以看到消息的样子:

请求

format = metadata
metadataHeaders = From,To,Subject
fields = payload/headers

GET https://www.googleapis.com/gmail/v1/users/me/messages/15339f3d12042fec?format=metadata&metadataHeaders=To&metadataHeaders=From&metadataHeaders=Subject&fields=payload%2Fheaders&access_token={ACCESS_TOKEN}

回应

{
 "payload": {
  "headers": [
   {
    "name": "To",
    "value": "Emil <emtholin@gmail.com>"
   },
   {
    "name": "From",
    "value": "\"BernieSanders.com\" <info@berniesanders.com>"
   },
   {
    "name": "Subject",
    "value": "5,000,000"
   }
  ]
 }
}

如您所见,您要查找的值在 headers 中。您只需要在 Java 中对它们进行分类即可。 headers 不像 body 那样编码,因此不需要进行任何解码。