仅从Gmail

时间:2017-09-12 04:46:48

标签: java performance google-api gmail-api

我正在编写一个小应用程序,以便在GMail收件箱中生成统计信息,以帮助完成清理邮箱的无尽任务。

我的代码正在运行,但我不必要地下载邮件的有效负载数据以仅访问邮件头(来自字段标头)。

带有有效载荷选项的方法Gmail.Users.Messages.Get.setFields(String),但有效载荷正是其中最重的部分。我已经尝试使用像“payload.header”,“payload.headers”这样的值,但这些值都不起作用。

所以问题是,如何才能从字段中访问消息而不是获取整个有效负载数据以提高性能?

    Map<String, Integer> emailAddressCountMap = new HashMap<String, Integer>();
    for (Message message : messages) {
        Message m1 = service.users().messages().get(user, message.getId()).setFields("payload").execute();

        Stream<String> fromHeaderValue = m1.getPayload().getHeaders().stream()
                .filter(h -> "From".equals(h.getName())).map(h -> h.getValue());

        String emailAddress = fromHeaderValue.toArray(String[]::new)[0];
        Integer count = emailAddressCountMap.get(emailAddress);
        if (count == null) {
            count = 0;
        }
        emailAddressCountMap.put(emailAddress, count + 1);

        System.out.println(emailAddress + ": " + count);
    }

1 个答案:

答案 0 :(得分:2)

以下修改怎么样?

来自:

Message m1 = service.users().messages().get(user, message.getId()).setFields("payload").execute();

致:

Message m1 = service.users().messages().get(user, message.getId()).setFields("payload/headers").execute();

如果这不起作用,或者我误解了你的问题,我很抱歉。