2016-01-23 4 views
0

Я использую API Gmail для получения данных электронной почты в своем простом Java-приложении, и я получил все, что захочу, используя quickstart, но я не могу получить полный контент электронной почты. Я использовал message.getRaw(), но он возвращает null. Итак, каждый может помочь, как я могу получить доступ к содержимому электронной почты.Как получить содержимое тела электронной почты с использованием API Gmail

+0

С содержанием электронной почты, вы имеете в виду текст, который находится в электронной почте? :) – Tholle

ответ

3

Использование messages.list, чтобы получить идентификаторы сообщений, которые будут использованы в дальнейшем для получения полностью квалифицированные сообщения отдельно через messages.get.

По какой-то причине message.list игнорирует поля, которые заданы в запросе. Google отправляет обратно json, который содержит только поля по умолчанию "messages(id,threadId),nextPageToken". Вот почему message.getRaw() возвращает null.

api-explorer - gmail.users.messages.list

/** 
* Returns empty messages sent between after and before 
* that contain only identifiers. 
* @param after 
* @param before 
* @param fields fields to be included in response 
*    (IGNORED see api-explorer) 
* @return 
*/ 
public List<Message> getEmptyMessages(Date after, Date before, String fields) {  
    Gmail.Users.Messages.List request = gmailService.users().messages().list("me") 
      // or setQ("is:sent after:yyyy/MM/dd before:yyyy/MM/dd") 
      .setLabelIds(Arrays.asList("SENT")) 
      .setQ("after:" + gmailFormat(after) +" "+ 
        "before:"+ gmailFormat(before)) 
      .setMaxResults(MAX_RESULTS) 
      .setFields(fields); 

    List<Message> list = new LinkedList<>(); 
    ListMessagesResponse response = null; 

    do { 
     response = request.execute(); 
     list.addAll(response.getMessages()); 
     request.setPageToken(response.getNextPageToken()); 

    } while (request.getPageToken() != null && request.getPageToken().length() > 0); 

    return list; 
} 

public String gmailFormat(Date d) { 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
    return sdf.format(d); 
} 

api-explorer - gmail.users.messages.get

/** 
* Returns "fully-qualified" message. 
* @param id  identifier of the message to be obtained. 
* @param fields fields to be included in response e.g. "raw,snippet" 
*    (use api-explorer to build this string) 
* @return 
*/ 
public Message getFullyQualifiedMessage(String id, String fields) { 
    return gmailService.users().messages().get("me", id) 
      .setFormat("FULL") 
      .setFields(fields) 
      .execute(); 
} 
Смежные вопросы