使用javamail searchterm通过发送日期获取一封电子邮件

Using javamail searchterm to get one email via send date

我需要按日期在我的帐户中找到一封特定的电子邮件,这样我才能获得它的内容,但是我使用的搜索词没有完成它的工作,匹配方法一直返回 false 而我的 AsyncTask 只是停留在那个出于某种原因尝试阻止,即使 folder.search 也应该可以快速处理数千封电子邮件。

代码:

@Override
    protected Void doInBackground(Void... params) {
        try {
            Properties properties = new Properties();
            properties.put("mail.store.protocol", "imaps");

            Session emailSession = Session.getDefaultInstance(properties);
            Store store = emailSession.getStore("imaps");
            store.connect("imap.gmail.com", username, password);

            // create the folder object and open it
            Folder emailFolder = store.getFolder("INBOX");
            emailFolder.open(Folder.READ_WRITE);
            SearchTerm term = new SearchTerm(){
                public boolean match(Message message) {
                    try {
                        if(message.getSentDate().toString().equals(emailSentDate)){
                            return true;
                        }
                    } catch (MessagingException ex) {
                        ex.printStackTrace();
                    }
                    return false;
                }
            };
            Message[] messages = emailFolder.search(term);
            Object msgContent = messages[0].getContent();
            if (msgContent instanceof Multipart) {

                Multipart multipart = (Multipart) msgContent;

                Log.e("BodyPart", "MultiPartCount: " + multipart.getCount());

                for (int k = 0; k < multipart.getCount(); k++) {

                    BodyPart bodyPart = multipart.getBodyPart(k);

                    String disposition = bodyPart.getDisposition();

                    if (disposition != null && (disposition.equalsIgnoreCase("ATTACHMENT"))) {
                        DataHandler handler = bodyPart.getDataHandler();
                        content = handler.getName();
                    } else {
                        content = bodyPart.getContent().toString();
                    }
                }
            } else
                content = messages[0].getContent().toString();
            emailFolder.close(false);
            store.close();
        }
        catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

其中 emailSentDate 是我通过调用 getSentDate().toString() 方法从上一个 activity 接收到的字符串。我也试过SendDateTerm,但我不能真正实现它,因为:

我能做什么?

编辑: 我只想通过发送日期搜索,因为我不知道 UID,如果您只需要查找特定的电子邮件,请检查 this

比较参数在javadocs中有描述,它表示你正在进行的比较类型,例如==、!=、>等

有多种方法可以为特定日期创建日期对象。例如,您可以使用 SimpleDateFormat 对象来解析字符串,并使用 return 日期。

编写自己的 SearchTerm 会导致在客户端进行比较;内置 SearchTerms 使用 IMAP SEARCH 功能在服务器上进行搜索。

确保您使用的是 current version of JavaMail。最近修复了日期搜索中的错误。

另请注意,IMAP 日期搜索只比较日期,而不比较时间。