som*_*ody 14 java gmail gmail-api
我想获得完整的消息体.所以我尝试:
Message gmailMessage = service.users().messages().get("me", messageId).setFormat("full").execute();
Run Code Online (Sandbox Code Playgroud)
为了获得身体,我尝试:
gmailMessage.getPayload().getBody().getData()
Run Code Online (Sandbox Code Playgroud)
但结果总是如此null.如何获得完整的邮件正文?
我试过这种方式,因为message.getPayload().getBody().getParts()始终为null
import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64;
import com.google.api.client.repackaged.org.apache.commons.codec.binary.StringUtils;
Run Code Online (Sandbox Code Playgroud)
(......)
Message message = service.users().messages().get(user, m.getId()).execute();
MessagePart part = message.getPayload();
System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(part.getBody().getData())));
Run Code Online (Sandbox Code Playgroud)
结果是纯HTML字符串
小智 6
我找到了更有趣的方法来解决一个完整的身体信息(而不仅仅是身体):
System.out.println(StringUtils.newStringUtf8( Base64.decodeBase64 (message.getRaw())));
Run Code Online (Sandbox Code Playgroud)
要从gmailMessage获取数据,可以使用gmailMessage.payload.parts [0] .body.data。如果要将其解码为可读的文本,可以执行以下操作:
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.StringUtils;
System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(gmailMessage.payload.parts[0].body.data)));
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您有消息 (com.google.api.services.gmail.model.Message),您可以使用以下方法:
public String getContent(Message message) {
StringBuilder stringBuilder = new StringBuilder();
try {
getPlainTextFromMessageParts(message.getPayload().getParts(), stringBuilder);
byte[] bodyBytes = Base64.decodeBase64(stringBuilder.toString());
String text = new String(bodyBytes, StandardCharsets.UTF_8);
return text;
} catch (UnsupportedEncodingException e) {
logger.error("UnsupportedEncoding: " + e.toString());
return message.getSnippet();
}
}
private void getPlainTextFromMessageParts(List<MessagePart> messageParts, StringBuilder stringBuilder) {
for (MessagePart messagePart : messageParts) {
if (messagePart.getMimeType().equals("text/plain")) {
stringBuilder.append(messagePart.getBody().getData());
}
if (messagePart.getParts() != null) {
getPlainTextFromMessageParts(messagePart.getParts(), stringBuilder);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它将所有消息部分与 mimeType“text/plain”组合在一起,并将其作为一个字符串返回。
这是在 c# 代码 gmail API v1 中读取电子邮件正文内容的解决方案:
var request = _gmailService.Users.Messages.Get("me", mail.Id);
request.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Full;
Run Code Online (Sandbox Code Playgroud)
并解决数据错误
var res = message.Payload.Body.Data.Replace("-", "+").Replace("_", "/");
byte[] bodyBytes = Convert.FromBase64String(res);
string val = Encoding.UTF8.GetString(bodyBytes);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17269 次 |
| 最近记录: |