2016-03-03 130 views
1

我正在研究Android工作室中的一个片段,其目的是显示To/From,Subject和消息正文。到目前为止,我能够检索,解码和显示正文。我尝试使用类似的方法为标题,但由于某种原因,它不正确解码,或我的方法调用没有得到正确的信息。以下是我正在使用的代码:如何使用Java使用Gmail-API解码邮件的标头?

 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下的部分会返回带有奇怪符号的数据,其中包括黑色菱形,里面有白色问号,随机顺序是字母。我已尝试Base64.decodeBase64陈述headerBytes中方法调用的许多不同组合和顺序,但无法成功。有什么我失踪?

编辑:我查看了google开发者网站上的gmail-api文档,我仍然对如何存储标题信息以及如何检索To,From和Subject等具体内容感到困惑。这可能是我的问题,因为我可能没有针对正确的数据。

回答

2

如果我list messagesget第一位的,我们可以看到该消息的样子:

请求

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 <[email protected]>" 
    }, 
    { 
    "name": "From", 
    "value": "\"BernieSanders.com\" <[email protected]>" 
    }, 
    { 
    "name": "Subject", 
    "value": "5,000,000" 
    } 
    ] 
} 
} 

正如你所看到的,您正在查找的值位于标题中秒。你只需要用Java把它们整理出来,就完成了。标题不像身体编码,所以不需要做任何解码。

+0

嗯,我现在只觉得很无聊。谢谢您的回答。它帮助我意识到我的问题是尝试解码标题。我不需要解码它。下面的代码行:'String h = message2.getPayload()。getHeaders()。get(5).getValue()。toString();'这正是你在Java中对它们进行分类时所提到的。谢谢。 (你第二次帮助我!)。 – Kumar

+0

@Harold啊,哈哈。你是对的:)不客气! – Tholle