使用 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) { }
}
我终于想通了。
- 获取消息列表
- 把列表变成JSON
- 创建获取消息的方法
- 过滤JSON得到消息ID
- 将消息 ID 应用于新方法
获取消息
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) { }
}
我目前有一个快速代码块,可以对自动化的 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) { }
}
我终于想通了。
- 获取消息列表
- 把列表变成JSON
- 创建获取消息的方法
- 过滤JSON得到消息ID
- 将消息 ID 应用于新方法
获取消息
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) { } }