2
我使用Spring Integration中的Pop3MailReciever連接到POP3郵件服務器。我想在處理它之後刪除該消息。我嘗試設置了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(消息)設置刪除標誌在消息。這一切都很好,但服務器上沒有任何事情發生。我的tcpdump正在運行,而我的應用程序正在運行,並且DELE POP3命令從未運行。
我這樣做,輸出功率爲除重要組成部分非常相似。這是會議的尾聲: '測試 。 NOOP + OK QUIT + OK' – Rodjer
嗯 - 什麼版本的Spring集成?什麼版本的javamail?我測試了4.2快照和javamail 1.5.2。 –
即時通訊使用Spring Integration 4.1.5和javamail 1.4.7。儘管我發現了這個問題。 AbstractMailReceiver的folderOpenMode設置爲Folder.READ_ONLY。它設置爲Folder.READ_WRITE的唯一位置是在onInit()方法中,但永遠不會調用它。你知道讓AbstractMailReceiver以讀/寫模式打開文件夾的恰當方法嗎? – Rodjer