如何使用 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 那样编码,因此不需要进行任何解码。
我正在 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 那样编码,因此不需要进行任何解码。