How to get email body content using Gmail API

拈花ヽ惹草 提交于 2019-12-12 04:39:48

问题


I am using Gmail API to get email data in my simple Java application and I got everything whatever I want using quickstart but I am unable to get full email content. I have used message.getRaw() but it returns null. So, anyone can help how can I access email content.


回答1:


Use messages.list to obtain identifiers of the messages, which will be used later to obtain fully-qualified messages separately via messages.get.

For some reason messages.list ignores fields that are set in request i.e. google sends back json that contains only default fields "messages(id,threadId),nextPageToken". That's why message.getRaw() returns 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();
}


来源:https://stackoverflow.com/questions/34964498/how-to-get-email-body-content-using-gmail-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!