我如何检索最近的未读邮件(在打开文件夹之前在收件箱中)。打开文件夹后,我想阅读它们

时间:2019-06-05 09:59:44

标签: spring-boot spring-integration javamail gmail-imap spring-integration-dsl

我只是想使用IMAP从Gmail中读取未读电子邮件。因此,当我运行我的应用程序时,它能够读取所有未读的电子邮件。即使在运行应用程序之前,INBOX中已经提供了这些电子邮件。这是一个问题,比方说我有120封电子邮件,我的应用程序开始读取它们,并且它已经读取了其中一封,并且计数减少到119,然后,如果假设我的电子邮件收到另一封电子邮件,那么我的服务将开始处理该电子邮件,其余119封电子邮件处于未读状态,我的应用程序未对其进行处理

我尝试使用Spring提供的DefaultSearchTermStrategy

    EmailReadTaskRunner<SampleMailMessage> emailTaskRunner = new 
    EmailReadTaskRunner<SampleMailMessage>();
        for (MailConfig mailConfig : yamlConfig.getMailConfig()) {
            if (mailConfig.isImapEnabled()) {
                Properties properties = this.getImapProperties();
                properties.put("mail.debug", 
                    String.valueOf(mailConfig.isDebugEnabled()));
                ImapMailReceiver receiver = new 
                ImapMailReceiver(mailConfig.getImageStoreUri() + 
                    "/INBOX");
                receiver.setShouldMarkMessagesAsRead(true);
                receiver.setShouldDeleteMessages(false);
                receiver.setJavaMailProperties(properties);
                receiver.setJavaMailAuthenticator(
                new MailAuthenticator(mailConfig.getUser(), 
                    mailConfig.getPassword()));
                StandardIntegrationFlow flow = IntegrationFlows             
.from(Mail.imapIdleAdapter(receiver).shouldReconnectAutomatically(true)).handle(message -> {
            emailTaskRunner.read(emailReadTask, message, mailConfig);
                    }).get();
                this.getFlowContext().registration(flow).register();
    }
}

我想阅读所有未读的电子邮件,可以是最新的也可以是旧的。 我正在使用SpringIntegration 5.0.3版本,并且还使用了代码中提到的IMAP协议。我也想知道为什么它表现出这种行为。在新邮件进入Gmail之前,它能够读取所有邮件,每当新邮件进入Gmail时,它便开始阅读新电子邮件并忽略以前的未读电子邮件

0 个答案:

没有答案