使用 Gmail API 从列表中获取邮件 ID,以便稍后在自动化中使用

Get a message's ID using Gmail API from a list so it can be used later in automation

我目前有一个快速代码块,可以对自动化的 Gmail 帐户进行排序以查找最新消息,并列出其 ID。我怎样才能将该 ID 保存到一个单独的字符串中,以便稍后可以使用它来获取消息进行比较。我是否缺少特定的代码行,或者我应该以某种方式重写它?谢谢

使用查询创建消息列表。它将打印每条消息的 ID。

private List<Message> listMessage(Gmail service,
                                  String query) throws IOException {
    ListMessagesResponse response = service.users().messages().list("me").setQ(query).execute();

    List<Message> messages = new ArrayList<Message>();
    while (response.getMessages() != null) {
        messages.addAll(response.getMessages());
        if (response.getNextPageToken() != null) {
            String pageToken = response.getNextPageToken();
            response = service.users().messages().list("me").setQ(query)
                    .setPageToken(pageToken).execute();
        } else {
            break;
        }
    }
    if(messages.isEmpty()) {
        listMessage(service, query);
    }
    for (Message message : messages) { //This is going to print the ID of each message.
        System.out.println(message.toPrettyString());
    }
    return messages;
}

这是要找最新的

public void listGmailEmail() {
    long unixTime = Instant.now().getEpochSecond();
    try {
        listMessage(service, "after: " + unixTime);

    } catch (IOException ignored) { }
}

我终于想通了。

  1. 获取消息列表
  2. 把列表变成JSON
  3. 创建获取消息的方法
  4. 过滤JSON得到消息ID
  5. 将消息 ID 应用于新方法
  6. 获取消息

    private List<Message> getMessageID(Gmail service,
                                  String query) throws IOException {
    ListMessagesResponse response = service.users().messages().list("me").setQ(query).execute();
    
    List<Message> messages = new ArrayList<Message>();
    while (response.getMessages() != null) {
        messages.addAll(response.getMessages());
        if (response.getNextPageToken() != null) {
            String pageToken = response.getNextPageToken();
            response = service.users().messages().list("me").setQ(query)
                    .setPageToken(pageToken).execute();
        } else {
            break;
        }
    }
    if(messages.isEmpty()) {
        getMessageID(service, query);
    }
    messageID = gson.toJson(messages);
    
    return messages;
    }
    
    private Message getEmail(Gmail service, String userId, String messageId)
        throws IOException {
    Message message = service.users().messages().get(userId, messageId).execute();
    
    email = message.toString();
    
    return message;
    }
    
    public void getGmailEmail() {
    try {
        getMessageID(service, "after: " + unixTime);
        messageID = messageID.split("\",")[0].substring(8);
        getEmail(service,"me", messageID);
        System.out.println("Email received");
        emailOrThread = email;
    } catch (IOException ignored) { }
    }