无法使用Gmail Java API获取包含文本或html内容的电子邮件正文?

时间:2017-04-21 06:23:16

标签: java email gmail gmail-api

我正在尝试使用Gmail Java API获取电子邮件正文。我收到了所有字段,包括to, from, subject

但是我无法获得文本正文,这里的html电子邮件正文是我的代码片段:

 List<MessagePart> parts =  message.getPayload().getParts();
            StringBuilder textSb = new StringBuilder();
            StringBuilder htmlSb = new StringBuilder();
            for (MessagePart part : parts) {
                if (part.getMimeType().equalsIgnoreCase("text/plain")) {
                    try {
                        textSb.append(new String(Base64.getDecoder().decode(part.getBody().getData()), "UTF-8"));
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }

                if (part.getMimeType().equalsIgnoreCase("text/html")) {
                    try {
                        htmlSb.append(new String(Base64.getDecoder().decode(part.getBody().getData()), "UTF-8"));
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
            }

可以使用以下方法获取简短的电子邮件正文文本片段(但不是完整正文):

message.getSnippet();

但在我的情况下,这还不够,我需要全身内容。

在调试器的上面循环中迭代MessageParts时,我首先得到两个部分,其中MIME类型为multipart/alternative,其他MIME类型为application/pdf,这是用于pdf文件附件。

如何获取电子邮件正文?

1 个答案:

答案 0 :(得分:1)

在搜索了更多内容后,我发现详细信息位于MessageParts Message对象列表的第一部分。在第一部分中,您将获得MessageParts列表,其中包含电子邮件正文,即文本内容,HTML内容:

    List<MessagePart> parts = message.getPayload().getParts().get(0).getParts();
    StringBuilder mixContent = new StringBuilder();

    for (MessagePart part : parts) {
                    if (part.getMimeType().equalsIgnoreCase("text/plain")) {
                        try {
                            mixContent.append(new String(Base64.getUrlDecoder().decode(part.getBody().getData()), "UTF-8"));
                            continue;
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                    }
                    if (part.getMimeType().equalsIgnoreCase("text/html")) {
                        try {
                             mixContent.append(new String(Base64.getUrlDecoder().decode(part.getBody().getData()), "UTF-8"));
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                    }
                }