Вызвано: javax.mail.AuthenticationFailedException: не удалось подключиться, пароль не указан? Адаптер Spring Integration Imap с Oauth2 - PullRequest
0 голосов
/ 25 мая 2020

Я пробовал код ниже.

@Bean
public IntegrationFlow mailListener() {
        return IntegrationFlows.from(Mail.imapInboundAdapter("imap://[emailId]:[accesstoken]@imap.gmail.com/INBOX")
                .shouldMarkMessagesAsRead(true).javaMailProperties(p -> p
                        .put("mail.imaps.ssl.enable", "true")
                .put("mail.imaps.sasl.enable", "true")
                .put("mail.imaps.sasl.mechanisms", "XOAUTH2")
                .put("mail.imaps.auth.login.disable", "true")
                .put("mail.imaps.auth.plain.disable", "true")
                .put("mail.debug.auth", "true")
                ).shouldDeleteMessages(false).get(), 
                 e -> e.poller(Pollers.fixedRate(5000).maxMessagesPerPoll(1)))
            .<Message>handle((payload, header) -> logMail(payload))
            .get();
    }

Я сослался Поддерживает ли Spring Integration Mail IMAP OAuth2?

Я получаю исключение ниже

15:46:31.870 ERROR [task-scheduler-1][org.springframework.integration.handler.LoggingHandler] org.springframework.messaging.MessagingException: failure occurred while polling for mail; nested exception is javax.mail.AuthenticationFailedException: failed to connect, no password specified?
    at org.springframework.integration.mail.MailReceivingMessageSource.doReceive(MailReceivingMessageSource.java:74)
    at org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:184)
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:212)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:407)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.pollForMessage(AbstractPollingEndpoint.java:376)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$null$3(AbstractPollingEndpoint.java:323)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:57)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:55)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$createPoller$4(AbstractPollingEndpoint.java:320)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

1 Ответ

0 голосов
/ 26 мая 2020

Во-первых, вы не показываете всю трассировку стека. Я считаю, что для этого MailReceivingMessageSource.doReceive() есть несколько cause by. Во-вторых, неясно, какой у вас accesstoken для этой конфигурации, поскольку мы можем получить его только во время выполнения, когда мы вызываем конечную точку OAuth REST для такого токена. И только после этого вы можете динамически настроить IntegraitonFlow для уже полученного токена. И, наконец, должны быть некоторые журналы DEBUG для Java Mail в соответствии с вашей конфигурацией "mail.debug.auth", "true". Плюс упомянутый вопрос SO отмечен как решенный. Значит, вы действительно делаете что-то, что не соответствует требуемой модели или полностью не относится к предмету.

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