我有一个Gmail邮件ID(十六进制字符串)' 149e841b6e3b1bfa'我需要使用java-gmail-imap api搜索和获取此电子邮件。然而,我找不到办法做到这一点。谷歌开发者页面here说明了这一点。
我最终从收件箱中获取了所有X_GM_MSGID,并将每条消息的GoogleMessageId与我拥有的消息ID进行比较。代码如下:
MyImapUtil imapUtil = new MyImapUtil();
com.google.code.javax.mail.Message[] ms;
com.google.code.com.sun.mail.imap.IMAPStore store = imapUtil.connectToGmailImap(userGuid);
folder = (com.google.code.com.sun.mail.imap.IMAPFolder) store.getFolder("INBOX");
/*folder = (IMAPFolder) store.getFolder("[Gmail]/Starred");
folder1 = (IMAPFolder) store1.getFolder("[Gmail]/All Mail");*/
if (folder != null && !folder.isOpen()) {
folder.open(Folder.READ_WRITE);
}
//List<EmailThread> emailThreads = (List<EmailThread>) folder.doCommand(new SearchUnreadThreads(andTerm));
ms = folder.getMessages();
com.google.code.javax.mail.FetchProfile fp = new com.google.code.javax.mail.FetchProfile();
fp.add(com.google.code.com.sun.mail.imap.IMAPFolder.FetchProfileItem.X_GM_MSGID);
folder.fetch(ms, fp);
long messageIdLong=-1;
try {
messageIdLong = Long.parseLong(messageIdHex,16);
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(messageIdLong==-1)
return false; // Not able to Parse the gmail hex messageID for the message
IMAPMessage im;
for (int i = ms.length - 1; i > 0; i--) {
im = (IMAPMessage) ms[i];
if(messageIdLong == im.getGoogleMessageId()){
// DO WHAT YOU WANT WITH THIS MESSAGE HERE
return true;
}
}
正如您所看到的,这不是很优雅,因为我必须获取所有收件箱电子邮件才能找到1封电子邮件。此外,我无法保证我的电子邮件仅在收件箱中,因此我必须在所有邮件中搜索。您能否根据Gmail消息ID(X_GM_MSGID)建议更好的方法来搜索我想要的邮件。请注意,我不想使用普通的JavaMail或谷歌邮件API。
答案 0 :(得分:0)
将149e841b6e3b1bfa转换为十进制,然后发出UID SEARCH X-GM-MSGID 423789473343342289423
(或任何数字)。