Spring Integration Mail IMAP - множественный получатель - PullRequest
0 голосов
/ 05 февраля 2020

Я использую весеннюю загрузку 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, и это, кажется, вызывает ошибку.

Я застрял здесь и не могу понять, как решить проблему.

Может кто-нибудь дать мне совет?

Спасибо

Анджело

1 Ответ

0 голосов
/ 05 февраля 2020

adapterSpe c .get ()

Выдача get() для объекта c обходит логин инициализации bean-компонента Spring c, который переключает папку для чтения / записи .

Либо сделайте адаптер @Bean, либо просто удалите .get(), и Spring выполнит инициализацию.

.from(adapterSpec, e -> ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...