【问题标题】:Fetching only message headers from Gmail仅从 Gmail 中获取邮件标头
【发布时间】:2017-09-12 04:46:48
【问题描述】:

我正在编写一个小应用程序来在 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);
    }

【问题讨论】:

    标签: java performance google-api gmail-api


    【解决方案1】:

    下面的修改怎么样?

    发件人:

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

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

    【讨论】:

    • 是的,它有效!我们也可以按照这个 GMail API 性能指南使用 payload[headers]。 developers.google.com/gmail/api/guides/performance 谢谢!
    • @Rafael Borja 欢迎。也谢谢你。很高兴我能对你有用。
    • 顺便说一句,@tanaike,您可以在github.com/rafaelborja/GmailInboxStats 找到完整的源代码,这是一个列出 gmail 邮箱中未读邮件数量最多的小脚本。谢谢!
    • @Rafael Borja 感谢您提供更多信息。
    猜你喜欢
    • 2021-08-20
    • 2016-04-17
    • 2017-05-15
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多