How to get full message body in Gmail?

后端 未结 7 1702
旧巷少年郎
旧巷少年郎 2020-12-16 15:07

I want to get full message body. So I try:

Message gmailMessage = service.users().messages().get(\"me\", messageId).setFormat(\"full\").execute();

相关标签:
7条回答
  • 2020-12-16 15:21

    I found more interesting way how to resolve a full body message (and not only body):

    System.out.println(StringUtils.newStringUtf8(   Base64.decodeBase64 (message.getRaw())));
    
    0 讨论(0)
  • 2020-12-16 15:26

    I tried this way, since message.getPayload().getBody().getParts() was always 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;
    

    (...)

    Message message = service.users().messages().get(user, m.getId()).execute();
    MessagePart part = message.getPayload();
    System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(part.getBody().getData())));
    

    And the result is pure HTML String

    0 讨论(0)
  • 2020-12-16 15:27

    here is the solution in c# code gmail API v1 to read the email body content:

      var request = _gmailService.Users.Messages.Get("me", mail.Id);
                    request.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Full;
    

    and to solve the data error

     var res = message.Payload.Body.Data.Replace("-", "+").Replace("_", "/");
     byte[] bodyBytes = Convert.FromBase64String(res);
    
    
     string val = Encoding.UTF8.GetString(bodyBytes);
    
    0 讨论(0)
  • 2020-12-16 15:29

    Base on the @Tholle comment I've made something like that

    Message message = service.users().messages()
            .get(user, messageHolder.getId()).execute();
    
    System.out.println(StringUtils.newStringUtf8(Base64.decodeBase64(
            message.getPayload().getParts().get(0).getBody().getData())));
    
    0 讨论(0)
  • 2020-12-16 15:34

    To get the data from your gmailMessage, you can use gmailMessage.payload.parts[0].body.data. If you want to decode it into readable text, you can do the following:

    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)));
    
    0 讨论(0)
  • 2020-12-16 15:39

    If you have the message (com.google.api.services.gmail.model.Message) you could use the following methods:

    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);
            }
        }
    }
    

    It combines all message parts with the mimeType "text/plain" and returns it as one string.

    0 讨论(0)
提交回复
热议问题