2015-01-19 7 views
6

Ich möchte den vollständigen Nachrichtentext erhalten. Also versuche ich:Wie erhalten Sie den vollständigen Nachrichtentext in Gmail?

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

Das Körper zu bekommen, versuche ich:

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

sondern führen immer null. Wie bekomme ich den vollständigen Nachrichtentext?

+0

entfernen Sie die setFormat zu lösen? – Hinotori

+0

Der Grund, warum diese bestimmte Version nicht funktioniert, ist, dass das rohe Feld absichtlich null ist. Wenn Sie sich die api-Dokumentation hier ansehen. https://developers.google.com/gmail/api/v1/reference/users/messages/get. Das Format "full" verwendet nicht das rohe Feld. – zypherman

Antwort

3

Um die Daten von Ihrem gmailMessage zu erhalten, können Sie gmailMessage.payload.parts [0] .body.data verwenden. Wenn Sie es in lesbaren Text entschlüsseln möchten, können Sie wie folgt vorgehen:..

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

danke, deine antwort hat mir geholfen – Hinotori

+0

Tolle Sachen. Klare Antwort. Danke noch einmal. – Yster

+1

@Yster Kein Problem :) Könnte das Lesen wert sein [diese Antwort] (http://stackoverflow.com/questions/32655874/cannot-get-the-body-of-email-with-gmail-php-api/32660892# 32660892) zu verstehen, dass dieses Problem kniffliger sein kann als es scheint. – Tholle

5

ich auf diese Weise versucht, da message.getPayload() getBody() getParts() war immer 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()))); 

Und das Ergebnis ist reiner HTML-String

4

fand ich interessante Art und Weise, wie man Resol habe eine Ganzkörper Nachricht (und nicht nur Körper):

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

Wenn Sie die Nachricht (com.google.api.services.gmail.model.Message) können Sie die folgenden Methoden verwenden:

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

Es kombiniert alle Nachrichtenteile mit dem MimeType "text/plain" und gibt es als eine Zeichenfolge zurück.

0

hier ist die Lösung in Code gmail API v1 C#, um den E-Mail-Textinhalt zu lesen:

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

und die Datenfehler

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


string val = Encoding.UTF8.GetString(bodyBytes); 
Verwandte Themen