Я использую весеннюю загрузку 2.2.4.RELEASE
Мне нужно создать динамический c почтовый приемник, потому что у меня может быть несколько почтовых серверов, где можно получать почту. Почтовый сервер должен быть настроен другими системами, поэтому я должен динамически получать сообщения.
Я исследовал, и мне понравилось решение Spring Integration и его DSL (примечание: мне достаточно просто загрузить сообщения и их вложения, если таковые имеются).
Итак, я построил этот код:
String flowId = MAIL_IN_FLOW_ID_PREFIX+cpd.getIndirizzoMail();
if( flowContext.getRegistrationById(flowId) != null ) {
flowContext.remove(flowId);
}
ImapMailInboundChannelAdapterSpec adapterSpec = Mail.imapInboundAdapter(connectionUrl.toString())
.javaMailProperties(javaMailProperties)
.shouldDeleteMessages(false)
.shouldMarkMessagesAsRead(false)
.selector(selectFunction);
if( confMailIn.isRichiedeAutenticazione() ) {
adapterSpec = adapterSpec.javaMailAuthenticator(new CasellaPostaleAuthenticator(cpd.getUsername(), cpd.getPassword()));
}
IntegrationFlow flow = IntegrationFlows
.from(adapterSpec.get(), e -> e.poller(Pollers.fixedDelay(Duration.ofSeconds(pollingSeconds)).maxMessagesPerPoll(maxMailMessagePerPoll)))
.handle(message -> {
logger.info("Message headers "+message.getHeaders());
logger.info("Message payload "+message.getPayload());
})
.get();
flowContext.registration(flow).id(flowId).register();
Я пытался использовать мою учетную запись Gmail. Код может подключиться к GMAIL с помощью imap, но, когда я пытаюсь просто регистрировать сообщения, я получаю эту ошибку:
A6 OK Успех
2020-02-05 12: 48: 41,835 23412 [task-scheduler-1] DEBUG osimail.ImapMailReceiver - Получено 10 сообщений
2020-02-05 12: 48: 41,836 23413 [task-scheduler-1] DEBUG oA7 STORE 1 + FLAGS ( \ Flagged) .simail.ImapMailReceiver - флаги USER не поддерживаются этим почтовым сервером. Пометка сообщения с системным флагом
A7 Попытка ЗАПИСЬ НЕТ в папке READ-ONLY (ошибка)
A8 ЗАКРЫТЬ
A8 OK Возврат в состояние проверки подлинности. (Успех)
IMAP отладки: добавлено соединение с проверкой подлинности - размер: 1
2020-02-05 12: 48: 42,198 23775 [task-scheduler-1] ОШИБКА osihandler.LoggingHandler - org.springframework.messaging.MessagingException: произошла ошибка при опросе почты; вложенное исключение - javax.mail.MessagingException: A7 попытка ЗАПИСЬ НЕТ в папке READ-ONLY (ошибка); Вложенное исключение: com.sun.mail.iap.CommandFailedException: A7 НЕТ попытки сохранения в папке READ-ONLY (ошибка) в org.springframework.integration.mail.MailReceivingMessageSource.doReceive (MailReceivingMessageSource. java: 74) в org. springframework.integration.endpoint.AbstractMessageSource.receive (AbstractMessageSource. java: 167) в org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage (SourcePollingChannelAdapter. java: 10 * 10 * 10 * 10 * 10 * 10 * 10 * 1028) кажется, что по умолчанию FOLDER открывается способом READ_ONLY, и это, кажется, вызывает ошибку.
Я застрял здесь и не могу понять, как решить проблему.
Может кто-нибудь дать мне совет?
Спасибо
Анджело