2015-09-01 2 views
2

Я подключаюсь к почтовому серверу 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 никогда не запускалась.

ответ

1

Установить mail.debug javamail на true и посмотреть на выход.

Я просто провел тест без проблем ...

DEBUG POP3: connecting to host "localhost", port 52026, isSSL false 
+OK POP3 
CAPA 
+OK 
USER 
. 
DEBUG POP3: server doesn't support TOP, disabling it 
DEBUG POP3: authentication command trace suppressed 
DEBUG POP3: authentication command succeeded 
2015-09-01 08:14:21,913 Pop3MailReceiver [task-scheduler-1] : opening folder [pop3://user:*****@localhost:52026/INBOX] 
STAT 
+OK 1 3 
2015-09-01 08:14:21,914 Pop3MailReceiver [task-scheduler-1] : attempting to receive mail from folder [INBOX] 
NOOP 
+OK 
2015-09-01 08:14:21,927 Pop3MailReceiver [task-scheduler-1] : found 1 new messages 
RETR 1 
+OK 
To: [email protected] 
From: [email protected] 
Subject: Test Email 

foo 
. 
2015-09-01 08:14:21,930 Pop3MailReceiver [task-scheduler-1] : Received 1 messages 
2015-09-01 08:14:21,930 Pop3MailReceiver [task-scheduler-1] : USER flags are not supported by this mail server. Flagging message with system flag 
NOOP 
+OK 
DELE 1 
+OK 
QUIT 
+OK 
+0

Я сделал это, и выход был очень похож на важную часть за исключением. Это конец сеанса: 'test . NOOP + OK QUIT + OK' – Rodjer

+0

Хммм - какая версия весенней интеграции? Какая версия javamail? Я тестировал с моментальным снимком 4.2 и javamail 1.5.2. –

+0

Im с использованием Spring Integration 4.1.5 и javamail 1.4.7. Однако я нашел проблему. У AbstractMailReceiver есть папкаOpenMode, установленная в Folder.READ_ONLY. Единственное место, где он установлен в Folder.READ_WRITE, находится в методе onInit(), но это никогда не вызывается. Знаете ли вы, что метод AbstractMailReceiver открывает папку в режиме чтения/записи? – Rodjer

Смежные вопросы