Я использую JavaMail для создания простого приложения, которое отправляет электронное письмо, когда находит какие-либо файлы в каталоге. Мне удалось заставить это работать от Затмения. Я запускаю приложение, и оно отправило письмо без ошибок.
Но, когда я создал банку и выполнил ее, она не работает в части отправки электронной почты.
Это дает исключение:
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)
Я использую библиотеку в этом методе:
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;
}
Я загружаю эти значения из файлов свойств.
mail.smtp.host=smtp.gmail.com
mail.smtp.starttls.enable=true
mail.smtp.port=587
mail.smtp.auth=true
Я попытался изменить хост с помощью ssl: //smtp.gmail.com, порт на 465 (только для того, чтобы попробовать что-то другое), но он тоже не работает. В любом случае, если он работает нормально из Eclipse с исходными параметрами, я думаю, что значения верны, но проблема заключается в создании фляги. Я не очень много знаю о возможных результатах или изменениях при создании банки.
Могут ли библиотеки JavaMail каким-то образом работать неправильно при создании jar-файла?
У вас есть идеи?