我正在尝试使用 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 文件附件。
我应该怎么做才能获取电子邮件正文?
最佳答案
经过更多搜索,我发现详细信息位于 Message
对象的 MessageParts
列表的第一部分。在第一部分中,您将获得 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();
}
}
}
关于java - 无法使用 Gmail Java API 获取包含文本或 html 内容的电子邮件正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43535344/