Java Mail: Sin proveedor para smtp

Estoy usando JavaMail para hacer una aplicación simple que envía un correo electrónico cuando encuentra algunos archivos en un directorio. Logré que funcionara desde Eclipse. Ejecuté la aplicación y me envió el correo electrónico sin errores.

Pero, cuando creé el archivo jar y lo ejecuté, falla en la parte de envío de correo electrónico. Da esta excepción:

javax.mail.NoSuchProviderException: No provider for smtp at javax.mail.Session.getProvider(Session.java:460) at javax.mail.Session.getTransport(Session.java:655) at javax.mail.Session.getTransport(Session.java:636) at main.java.util.MailManager.sendMail(MailManager.java:69) at main.java.DownloadsMail.composeAndSendMail(DownloadsMail.java:16) at main.java.DownloadsController.checkDownloads(DownloadsController.java:51) at main.java.MainDownloadsController.run(MainDownloadsController.java:26) at java.lang.Thread.run(Unknown Source) 

Estoy usando la biblioteca en este método:

 public static boolean sendMail(String subject, String text) { noExceptionsThrown = true; try { loadProperties(); } catch (IOException e1) { System.out.println("Problem encountered while loading properties"); e1.printStackTrace(); noExceptionsThrown = false; } Properties mailProps = new Properties(); String host = "mail.smtp.host"; mailProps.setProperty(host, connectionProps.getProperty(host)); String tls = "mail.smtp.starttls.enable"; mailProps.setProperty(tls, connectionProps.getProperty(tls)); String port = "mail.smtp.port"; mailProps.setProperty(port, connectionProps.getProperty(port)); String user = "mail.smtp.user"; mailProps.setProperty(user, connectionProps.getProperty(user)); String auth = "mail.smtp.auth"; mailProps.setProperty(auth, connectionProps.getProperty(auth)); Session session = Session.getDefaultInstance(mailProps); //session.setDebug(true); MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(messageProps.getProperty("from"))); message.addRecipient(Message.RecipientType.TO, new InternetAddress( messageProps.getProperty("to"))); message.setSubject(subject); message.setText(text); Transport t = session.getTransport("smtp"); try { t.connect(connectionProps.getProperty("user"), passwordProps .getProperty("password")); t.sendMessage(message, message.getAllRecipients()); } catch (Exception e) { System.out.println("Error encountered while sending the email"); e.printStackTrace(); noExceptionsThrown = false; } finally { t.close(); } } catch (Exception e) { System.out.println("Error encountered while creating the message"); e.printStackTrace(); noExceptionsThrown = false; } return noExceptionsThrown; } 

Estoy cargando estos valores de los archivos de propiedades.

 mail.smtp.host=smtp.gmail.com mail.smtp.starttls.enable=true mail.smtp.port=587 mail.smtp.auth=true 

He intentado cambiar el host por ssl: //smtp.gmail.com, el puerto por 465 (solo por intentar algo diferente), pero tampoco funciona. De todos modos, si funciona bien desde Eclipse con los parámetros originales, supongo que los valores son correctos, pero el problema es crear el jar. No sé mucho sobre los posibles resultados o cambios al crear un jar. ¿Podrían las bibliotecas JavaMail de alguna manera fallar cuando se crea el jar?

¿Tienes alguna idea?

Los archivos jar compatibles: mail.jar y activation.jar no están en su classpath. Cuando construye su jar, necesita incluirlos en su classpath.

Yo tuve el mismo problema.

Puede solucionarlo haciendo el archivo JAR ejecutable en Eclipse y utilizando las opciones de manejo de la biblioteca. Seleccione el segundo al hacer su JAR, el que dice “El paquete requiere las bibliotecas en el JAR generado” .

paquete de bibliotecas requeridas

necesitas agregar el archivo smtp.jar, también me quedé con el mismo error después de buscar en Google y verificar algunos proyectos anteriores. Descubrí que extrañaba este archivo en particular en mi biblioteca, agregué este archivo a la biblioteca y encontré un problema fijo.

Tuve el mismo error, actualizando el jar de Oracle lo arreglé directamente.

Para aquellos que usan Gradle: puede obtener todos los Jars requeridos de la siguiente manera (1.5.5 es la última versión):

  compile 'com.sun.mail:javax.mail:1.5.5' 

Logré solucionar este error, que se debió a una mala biblioteca. Intenté usar javax.mail jar descargado de maven, que resultó ser incompleto. Así que busqué una vez más para javamail y obtuve uno directamente de Oracle (haga clic en el enlace de publicación ). Esta vez es un archivo zip.