== Camel Spring Boot Microsoft Exchange IMAP Oauth2 Authentication

This is an example that shows how to use Camel on Spring Boot to connect with
IMAP protocol and access email data for Office 365 users using OAuth2 authentication.

The application will use the client credentials grant flow to get the access token
and use it to authenticate IMAP connections.


=== Prerequisite

* To use OAuth, an application must be registered with Azure Active Directory.
Follow the instructions listed in https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app[Register an application with the Microsoft identity platform] to register a new application.

* Enable application to access Exchange mailboxes via client credentials flow adding *IMAP.AccessAsApp* permission. Instructions https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth#add-the-pop-and-imap-permissions-to-your-aad-application[here]

* Create and register your Azure Active Directory application's service principal
in Exchange via Exchange Online PowerShell. Instructions https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth#register-service-principals-in-exchange[here]

* Edit the link:src/main/resources/application.properties[application.properties] adding the values to the properties marked with ``<FILL-ME>`` tag

=== How to run

You can run this example using:

[source%nowrap, console]
----
mvn spring-boot:run
----
And you should see this output:

[source%nowrap, console]
----
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.5)

2022-10-24 19:19:58.705  INFO 2274709 --- [           main] o.a.c.e.mail.oauth2.CamelApplication     : Starting CamelApplication
2022-10-24 19:19:58.707  INFO 2274709 --- [           main] o.a.c.e.mail.oauth2.CamelApplication     : No active profile set, falling back to 1 default profile: "default"
2022-10-24 19:20:00.777  INFO 2274709 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Apache Camel is starting
2022-10-24 19:20:00.785  INFO 2274709 --- [           main] c.s.b.CamelSpringBootApplicationListener : Starting CamelMainRunController to ensure the main thread keeps running
2022-10-24 19:20:00.785  INFO 2274709 --- [inRunController] org.apache.camel.main.MainSupport        : Apache Camel (Main)  is starting
2022-10-24 19:20:00.813  INFO 2274709 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Routes startup (started:1)
2022-10-24 19:20:00.813  INFO 2274709 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Started camel-mail-ms-exchange (imaps://outlook.office365.com:993)
2022-10-24 19:20:00.813  INFO 2274709 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Apache Camel (CamelMailExchangeOAuth2) started in 1s226ms (build:29ms init:1s163ms start:34ms)
2022-10-24 19:20:00.819  INFO 2274709 --- [           main] o.a.c.e.mail.oauth2.CamelApplication     : Started CamelApplication in 2.407 seconds (JVM running for 2.883)
2022-10-24 19:20:04.842  INFO 2274709 --- [fice365.com:993] camel-mail-ms-exchange                   : message Received:
From: John Doe <jdoe@example.com>
Subj: Test
Body:
This is a Test!!!

2022-10-24 19:20:05.167  INFO 2274709 --- [fice365.com:993] camel-mail-ms-exchange                   : message Received:
From: Teigan Moore <teigan@xyz.com>
Subj: Prova
Body:
Prova Prova Prova
--
Teigan Moore
----