2015-01-19 44 views
6

Tôi muốn nhận được toàn bộ nội dung thư. Vì vậy, tôi cố gắng:Cách tải nội dung thư đầy đủ trong Gmail?

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

Đó để có được cơ thể, tôi cố gắng:

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

nhưng kết quả luôn null. Làm thế nào để có được toàn bộ nội dung tin nhắn?

+0

tháo setFormat? – Hinotori

+0

Lý do phiên bản cụ thể này không hoạt động là trường thô là không có mục đích. Nếu bạn nhìn vào tài liệu api ở đây. https://developers.google.com/gmail/api/v1/reference/users/messages/get. Định dạng "đầy đủ" không sử dụng trường thô. – zypherman

Trả lời

3

Để lấy dữ liệu từ gmailMessage, bạn có thể sử dụng gmailMessage.payload.parts [0] .body.data. Nếu bạn muốn giải mã nó vào văn bản có thể đọc được, bạn có thể làm như sau:..

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

cảm ơn, câu trả lời của bạn đã giúp tôi – Hinotori

+0

Nội dung tuyệt vời. Câu trả lời rõ ràng. Cảm ơn một lần nữa. – Yster

+1

@Yster Không có vấn đề gì :) Có thể đáng đọc [câu trả lời này] (http://stackoverflow.com/questions/32655874/cannot-get-the-body-of-email-with-gmail-php-api/32660892# 32660892) để hiểu rằng vấn đề này có thể phức tạp hơn. – Tholle

5

tôi đã cố gắng theo cách này, vì message.getPayload() getBody() getParts() là luôn luôn là 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()))); 

Và kết quả là tinh khiết HTML Chuỗi

4

tôi thấy cách thú vị hơn làm thế nào để Resol đã nhắn toàn thân (và không chỉ cơ thể):

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

Nếu bạn có tin nhắn (com.google.api.services.gmail.model.Message), bạn có thể sử dụng các phương pháp sau:

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

Kết hợp tất cả các phần tin nhắn với mimeType "text/plain" và trả về nó dưới dạng một chuỗi.

0

đây là giải pháp trong C# mã gmail API v1 để đọc nội dung cơ thể email:

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

và để giải quyết các lỗi dữ liệu

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


string val = Encoding.UTF8.GetString(bodyBytes); 
Các vấn đề liên quan