Я подключаюсь к почтовому серверу POP3, используя Pop3MailReciever in Spring Integration. Я хочу удалить сообщение после его обработки. Я попытался установить флаг ShouldDeleteMessages, но он не удаляет сообщение. Это код делает опрос:Pop3MailReciever не удаляет сообщения
@SpringBootApplication
public class EmailPollerApplication {
public static void main(String[] args) {
SpringApplication.run(EmailPollerApplication.class, args);
}
@Bean
IntegrationFlow pollingFlow() {
return IntegrationFlows
.from(mailReceivingMessageSource(), e -> e.poller(Pollers.fixedDelay(60000L)))
.transform(mailTransformer())
.transform(requestTransformer())
.handle(wsGateway())
.channel("nullChannel")
.get();
}
@Bean
MailReceivingMessageSource mailReceivingMessageSource(){
Pop3MailReceiver pop3MailReceiver = new Pop3MailReceiver("mailserver.example.com", 110, "username", "password");
pop3MailReceiver.setShouldDeleteMessages(true);
pop3MailReceiver.setMaxFetchSize(1);
MailReceivingMessageSource mailReceivingMessageSource = new MailReceivingMessageSource(pop3MailReceiver);
return mailReceivingMessageSource;
}
Это код из Pop3MailReciever, который должен быть удаление сообщения:
@Override
protected void deleteMessages(Message[] messages) throws MessagingException {
super.deleteMessages(messages);
// expunge deleted mails, and make sure we've retrieved them before closing the folder
for (int i = 0; i < messages.length; i++) {
new MimeMessage((MimeMessage) messages[i]);
}
}
super.deleteMessages (сообщения) устанавливающее DELETED флаг по сообщениям. Все это хорошо и хорошо, но на сервере ничего не происходит. У меня было tcpdump, когда мое приложение запускалось, и команда DELE POP3 никогда не запускалась.
Я сделал это, и выход был очень похож на важную часть за исключением. Это конец сеанса: 'test . NOOP + OK QUIT + OK' – Rodjer
Хммм - какая версия весенней интеграции? Какая версия javamail? Я тестировал с моментальным снимком 4.2 и javamail 1.5.2. –
Im с использованием Spring Integration 4.1.5 и javamail 1.4.7. Однако я нашел проблему. У AbstractMailReceiver есть папкаOpenMode, установленная в Folder.READ_ONLY. Единственное место, где он установлен в Folder.READ_WRITE, находится в методе onInit(), но это никогда не вызывается. Знаете ли вы, что метод AbstractMailReceiver открывает папку в режиме чтения/записи? – Rodjer