如何使用Gmail API获取电子邮件正文内容 [英] How to get email body content using Gmail API

查看:3897
本文介绍了如何使用Gmail API获取电子邮件正文内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Gmail API在我的简单Java应用程序中获取电子邮件数据,并且我使用 quickstart ,但无法获取完整的电子邮件内容。我使用了message.getRaw(),但它返回null。
所以,任何人都可以帮助我如何访问电子邮件内容。

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.

推荐答案

使用 messages.list 以获取消息的标识符,稍后将通过 messages.get 分别获取完全限定的消息。

由于某些原因,message.list 忽略在请求中设置的字段,即Google发送回仅包含默认字段的json 消息(ID,threadId所),nextPageToken这个。这就是为什么 message.getRaw()返回 null

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

这篇关于如何使用Gmail API获取电子邮件正文内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆