starter mkyong mailsender mail javamailsender spring smtp javamail

mkyong - spring mailsender gmail



Spring JavaMailSenderImpl javax.mail.NoSuchProviderException: smtp (6)

Tengo un proyecto muy grande con un montón de dependencias, y recibo la siguiente excepción cuando intento enviar un correo:

javax.mail.NoSuchProviderException: smtp

Sé que el código funciona porque es parte de una biblioteca que se usa en otros proyectos. ¿Alguien sabe qué podría causar esta excepción? He revisado todos los archivos jar y el único que contiene ''javax.mail'' es ''mail-1.4.4-SNAPSHOT.jar''.

¿Hay algún archivo / clase que registre el protocolo ''smtp'', y podría estar sucediendo en otro lugar en mi classpath?



Tuve este problema Poner smtp.jar en classpath resolvió el problema.


Tengo el mismo problema mientras actualizamos jboss de 4.x a 6.x.

Aquí el problema es establecer classpath para la mayor cantidad de archivos mail.jar (el servidor predeterminado tomará mail.jar de su common / lib foler si está disponible allí). Para confirmar qué archivo jar está usando, la siguiente declaración es útil.

System.out.println (getClass (). GetResource ("/ javax / mail / Address.class"));

si usa el otro archivo jar que no está esperando ... establezca classpath en su lugar que esté usando. de lo contrario, elimine ese archivo jar de la ubicación impresa anterior.


Ha pasado un tiempo desde que se hizo esta pregunta, pero aún vale la pena responderla:

Lo que sucede es que su servicio de correo utiliza el protocolo SMTP (por lo general, incluso se lo considera el protocolo predeterminado para usar) para enviar correo. No importa qué clase concreta esté utilizando como servicio de correo (puede depender de si está trabajando con Java EE, Spring u otra cosa), termina usando clases de la API de javamail. En esta API, para establecer una conexión con su servidor de correo, se creará una instancia de javax.mail.Session y este objeto cargará dinámicamente las clases que brindan soporte para el uso del protocolo.

Al cargar la clase requerida, en caso de que no se encuentre, la ClassNotFoundException es capturada y relanzada como javax.mail.NoSuchProviderException, con un mensaje que indica la falta de compatibilidad con el protocolo.

La solución en ese caso es agregar el smtp.jar a su classpath. Con un proyecto basado en Maven, simplemente agregue la siguiente dependencia

<dependency> <groupId>com.sun.mail</groupId> <artifactId>smtp</artifactId> <version>1.4.5</version> </dependency>


Esto también puede ocurrir cuando también tienes una versión incorrecta del archivo "mailapi.jar" en tu classpath.

Hace poco actualicé un proyecto para usar la API de PayPal, y la distribución de PayPal contenía un archivo mailapi.jar, que era diferente al que tenía actualmente en mi proyecto, y causó que mi aplicación fallara al enviar correo.

Entonces, para mí, solo tuve que volver a mi viejo mailapi.jar y estaba bien.


Tenía este problema ahora mismo. El problema era dos javax.mail.jar en el mismo classpath.