【问题标题】:Get emails list by applying advanced filter in gmail api通过在 gmail api 中应用高级过滤器获取电子邮件列表
【发布时间】:2021-05-20 08:53:00
【问题描述】:

我正在使用 gmail api 发送和阅读电子邮件。

我需要通过应用一些过滤器来获取所有电子邮件。

例如:假设我需要获取我和其他 N 个用户之间的所有电子邮件(user1@gmail.comuser2@gmail.com.. ...

我需要来自收件箱和已发送邮箱的所有电子邮件,方法是应用这样的过滤器(我发送给用户或用户发送给我的所有电子邮件,不包括聊天)

我可以通过以下方法从收件箱中获取所有消息。

public List<Message> getMessages(Gmail service) throws IOException {
    List<Message> messages = service.users().messages().list("me").execute().getMessages();
    return messages;
}

在做了一些研究之后,我能够应用这样的查询,它返回 user1@gmail.com 发送的所有收件箱消息,不包括聊天

public List<Message> getMessages(Gmail service) throws IOException {
    String query = "-in:chats from:user1@gmail.com";
    List<Message> messages = service.users().messages().list("me").setQ(query).execute().getMessages();
    return messages;
}

如果我将查询更改为此

String query = "in:inbox OR in:sent";

然后我可以将收件箱中的所有电子邮件和已发送的电子邮件合并,但我仍然坚持只过滤给定用户和我之间的对话。

我搜索了很多,但没有找到解决方案。

【问题讨论】:

    标签: java gmail-api


    【解决方案1】:

    使用此过滤器:

    String query = "(from:me AND to:user1@gmail.com) OR (from:user1@gmail.com AND to:me) AND (in:inbox OR in:sent)  AND -in:chats"
    

    String query = "((from:me AND to:user1@gmail.com) OR (from:user1@gmail.com AND to:me)) AND (in:inbox OR in:sent)  AND -in:chats"
    

    在 Gmail 桌面手动测试时,它在我身边工作。

    参考:

    【讨论】:

    • 感谢您的回答,它正在工作。我还有一个问题。有没有其他方法可以创建查询以使其更具动态性而不是手动编写。
    • 什么意思?你能进一步解释你想要达到的目标吗?
    • 感谢您提供的信息,如果您的主要目标是创建用于搜索消息的查询,那么唯一的方法是手动创建用作 Q 的查询语法。请参阅 @ 987654322@
    • 您可能还想检查 Managing Filters 是否可以实现您的目标。您可以使用过滤器为帐户配置高级过滤规则。过滤器可以根据传入邮件的属性或内容自动添加或删除标签或将电子邮件转发到经过验证的别名。
    • 请检查filter criteria 可以配置的内容,条件非常基本,因此如果您需要复杂的过滤条件,您仍然需要为其创建查询语法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2019-01-24
    • 2016-10-24
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多