Enviar un correo electrónico desde un servidor office 365 tipo exchange usando Java Spring Boot

TUTORIALES DE JAVA

Conectarse a un servidor de correo usando Spring Boot es bastante sencillo usando java mail, pero este solo funciona para correos personales como outlook, yahoo, gmail y demás email personales.

Basta con configurar puertos, host, dominio del servidor de correo, usuario y contraseña.

Por alguna razón, con un servidor de correo outlook office 365 las cosas cambian un poco. Con las nuevas versiones aparecen errores de conexión y no es posible conectarnos de Java.

En este post básicamente te explicare una de las soluciones que encontré sobre cómo configurar JavaMail para usar Office 365 Exchange Service para enviar correo.

Parámetros de configuración

Por defecto, estos son los parametros de configuracion para un servidor de correo office personal.

spring.mail.host=smtp.office365.com
spring.mail.port=587
[email protected]
spring.mail.password=
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

Pero como he mencionado, en el caso de office 365 en las ultimas versiones da problemas, asi que yo he encontrado una solución final.

API REST Outlook365 con ews y Spring Boot

Para los programadores apurados, aqui te dejo mi github para que vayas y clones el proyecto:

Y para los mas pacientes, aqui vamos paso a paso.

Recomendado:   APP INVENTOR: como CREAR Y MOSTRAR LISTAS

Agregar dependencia maven

Vamos al pom de tu proyecto en spring boot

<dependency>
	<groupId>com.microsoft.ews-java-api</groupId>
	<artifactId>ews-java-api</artifactId>
	<version>2.0</version>
</dependency>

Una vez agregada la dependencia corres el proyecto como clean y luego install. Si usas Spring Tools das click derecho sobre el proyecto, en la sección de run encuentras las opciones antes mencionadas. Si estas desde consola en Linux puedes usar:

mvn clean
mvn install

Ahora simplemente pegamos el siguiente codigo:

Código Java para Spring Boot

Este fue un metodo que hice para crear un API rest que enviara un correo automáticamente.

public String probarCorreo() throws Exception {
		ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
		ExchangeCredentials credentials = new WebCredentials("username", "password");
		service.setCredentials(credentials);
		//service.setEnableScpLookup(true);
		//service.setUrl(new java.net.URI("https://webmail.travelpro.com"));
		
		service.autodiscoverUrl("[email protected]", new IAutodiscoverRedirectionUrl() {
			@Override
			public boolean autodiscoverRedirectionUrlValidationCallback(String url) throws AutodiscoverLocalException {
				return url.toLowerCase().startsWith("https://");
			}
		});
		
		EmailMessage msg = new EmailMessage(service);
        msg.setSubject("Hello world!");
        msg.setBody(MessageBody.getMessageBodyFromText("Sent using the EWS Java API."));
        msg.getToRecipients().add("[email protected]");
        msg.send();
        
        
        

		return service.toString();
	}

Si tienen algún error de conexión puedes descomentar la linea de código:

service.setEnableScpLookup(true);

Espero que te haya servido, como he mencionado antes, si quieres puedes ir a mi repositorio y simplemente copiarlo y reemplazar las credenciales de tu servidor de correo.

Nota: los servidores de correo exchange, en especial los de Outlook 365 son muy quisquillosos con el tema de la seguridad, así que si ingresas mal tus datos te bloquean el API por algunas horas.

Documentación completa

Aquí te dejo la documentación completa de la librería ews-java-api que he usado para este post.

Hay cosas interesantes, como por ejemplo, que también podemos leer correos, ver carpetas, listado de contactos y demás.

Recomendado:   ¿QUE ES APP INVENTOR? ¿COMO FUNCIONA?