如何使用java -gmail-imap api中的gmail Hex messageId搜索和获取消息

时间:2014-11-28 03:50:17

标签: java gmail javamail imap

我有一个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。

1 个答案:

答案 0 :(得分:0)

将149e841b6e3b1bfa转换为十进制,然后发出UID SEARCH X-GM-MSGID 423789473343342289423(或任何数字)。