it-swarm.com.de

Wie erhalte ich den vollständigen Nachrichtentext in Google Mail?

Ich möchte einen vollständigen Nachrichtentext erhalten. Also versuche ich:

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

Das, um Körper zu bekommen, versuche ich:

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

aber Ergebnis immer null. Wie erhalte ich den vollständigen Nachrichtentext?

11
TestUser

Ich habe einen interessanteren Weg gefunden, um eine Ganzkörper-Nachricht (und nicht nur den Körper) aufzulösen:

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

Ich habe es auf diese Weise versucht, da message.getPayload (). GetBody (). GetParts () immer null war

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

Das Ergebnis ist eine reine HTML-Zeichenfolge

5
Hinotori

Um die Daten aus Ihrer Google Mail-Nachricht abzurufen, können Sie gmailMessage.payload.parts [0] .body.data verwenden. Wenn Sie es in lesbaren Text dekodieren möchten, können Sie Folgendes tun:

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)));
4
Tholle

hier ist die Lösung in c # code gmail API v1, um den Inhalt der E-Mail zu lesen:

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

und um den Datenfehler zu beheben

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


 string val = Encoding.UTF8.GetString(bodyBytes);
2
Tal Avissar

Wenn Sie die Nachricht (com.google.api.services.gmail.model.Message) haben, 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 MIME-Typ "text/plain" und gibt ihn als eine Zeichenfolge zurück.

2
Gerard Verbeek

Auf der Grundlage des @ Tholle-Kommentars habe ich so etwas gemacht

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
Tomasz TJ

Wenn wir die vollständige Nachricht erhalten. Der Nachrichtentext befindet sich in Parts.

Dies ist ein Beispiel, in dem Nachrichtenkopfzeilen (Datum, Von, Bis und Betreff) und der Nachrichtentext als einfacher Text angezeigt werden. Teile in Payload geben beide Nachrichtentypen zurück (Nur-Text und formatierter Text). Ich habe mich für Klartext interessiert.

Message msg = service.users().messages().get(user, message.getId()).setFormat("full").execute();
// Displaying Message Header Information
for (MessagePartHeader header : msg.getPayload().getHeaders()) {
  if (header.getName().contains("Date") || header.getName().contains("From") || header.getName().contains("To")
      || header.getName().contains("Subject"))
    System.out.println(header.getName() + ":" + header.getValue());
}
// Displaying Message Body as a Plain Text
for (MessagePart msgPart : msg.getPayload().getParts()) {
  if (msgPart.getMimeType().contains("text/plain"))
    System.out.println(new String(Base64.decodeBase64(msgPart.getBody().getData())));
}
0
zHs