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. Ejecuto la aplicación y envió el correo electrónico sin errores.Java Mail: Sin proveedor para smtp
Pero cuando creé el jar y lo ejecuté, falla en la parte de envío del correo electrónico. Da a 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 a partir 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 tratado de cambiar el host mediante SSL: //smtp.gmail.com, por el puerto 465 (sólo para probar algo diferente), pero no funciona bien. 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 contenedor. 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?
¿Tiene alguna idea?
muchas gracias por responder tan rápido. Acabo de intentar lo que me contó, no sé si lo hice de la manera correcta: Dentro de Eclipse, en las propiedades del proyecto, lo he visto en la ruta de compilación, en Librerías: activation.jar , mailapi.jar, smtp.jar ... están ahí. En Order and Export, he comprobado estos jar's. No fueron revisados antes. He exportado el jar nuevamente, pero el error persiste. ¿Puedo haber hecho algo mal? Tal vez no debería hacerlo desde Eclipse? Gracias Mike. – pablof
No estoy familiarizado con eclipse.Pero esto es definitivamente algo relacionado con el classpath. Puede cambiar la forma en que ejecuta el contenedor como el siguiente paso. Incluya la ruta a esos dos jar cuando ejecuta su jar. Así que fuera de la cabeza, algo así como: jar -cp ./full/path/to/activation.jar:./full/path/to/mail.jar -jar yourjarname.jar – Mike
Gracias Mike. Voy a intentar con esto. – pablof