【问题标题】:How to I decode the headers of a message using Gmail-API using Java?如何使用 Java 使用 Gmail-API 解码邮件的标头?
【发布时间】:2016-06-16 03:35:24
【问题描述】:

我正在 android studio 中处理一个片段,其目的是显示收件人/发件人、主题和邮件正文。到目前为止,我能够检索、解码和显示身体。我尝试对标头使用类似的方法,但由于某种原因它没有正确解码,或者我的方法调用没有得到正确的信息。这是我正在使用的代码:

     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 下的部分返回带有奇怪符号的数据,其中包括内部带有白色问号的黑色菱形和随机顺序的字母。我为headerBytesBase64.decodeBase64 语句中的方法调用尝试了许多不同的组合和顺序,但未能成功。有什么我遗漏的吗?

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

【问题讨论】:

    标签: java android gmail-api


    【解决方案1】:

    如果我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 <emtholin@gmail.com>"
       },
       {
        "name": "From",
        "value": "\"BernieSanders.com\" <info@berniesanders.com>"
       },
       {
        "name": "Subject",
        "value": "5,000,000"
       }
      ]
     }
    }
    

    如您所见,您要查找的值位于标题中。你只需要在 Java 中整理它们就可以了。标头不像正文那样编码,因此无需进行任何解码。

    【讨论】:

    • 好吧,我现在真的很傻。谢谢您的回答。它帮助我意识到我的问题是试图解码标题。我不需要解码它。以下行有效:String h = message2.getPayload().getHeaders().get(5).getValue().toString(); 这正是您通过在 Java 中对它们进行排序所提到的。谢谢你。 (你第二次帮助我了!)。
    猜你喜欢
    • 2015-06-15
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2014-12-14
    • 2019-02-24
    • 2016-11-25
    • 2016-07-30
    相关资源
    最近更新 更多