2015-01-19 2 views
6

Я хочу получить полный текст сообщения. Поэтому я стараюсь:Как получить полный текст сообщения в Gmail?

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

Это, чтобы получить тело, я стараюсь:

gmailMessage.getPayload().getBody().getData() 

но результат всегда null. Как получить полный текст сообщения?

+0

удалить SetFormat? – Hinotori

+0

Причина, по которой эта конкретная версия не работает, заключается в том, что исходное поле является нулевым. Если вы посмотрите на api docs здесь. https://developers.google.com/gmail/api/v1/reference/users/messages/get. «Полный» формат не использует необработанное поле. – zypherman

ответ

3

Чтобы получить данные из вашего 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))); 
+1

спасибо, ваш ответ помог мне – Hinotori

+0

Отличный материал. Четкий ответ. Еще раз спасибо. – Yster

+1

@Yster Нет проблем :) Возможно, стоит прочитать [этот ответ] (http://stackoverflow.com/questions/32655874/cannot-get-the-body-of-email-with-gmail-php-api/32660892# 32660892), чтобы понять, что эта проблема может быть сложнее, чем кажется. – Tholle

5

Я попробовал этот путь, так как message.getPayload() getBody() getParts() всегда был нулевой

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

И результат чистый HTML Строка

4

я нашел более интересный способ, как RESOL ве полного тела сообщения (а не только тело):

System.out.println(StringUtils.newStringUtf8( Base64.decodeBase64 (message.getRaw()))); 
1

Если у вас есть сообщение (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, "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); 
     } 
    } 
} 

Он объединяет все части сообщений с mimeType "text/plain" и возвращает их как одну строку.

0

здесь решение в C# код Gmail API v1, чтобы прочитать содержимое электронной почты тела:

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

и решить ошибки данных

var res = message.Payload.Body.Data.Replace("-", "+").Replace("_", "/"); 
byte[] bodyBytes = Convert.FromBase64String(res); 


string val = Encoding.UTF8.GetString(bodyBytes); 
Смежные вопросы