我正在使用JavaMail做一個簡單的應用程序,當它發現一個目錄中的一些文件時發送一封電子郵件。我設法從Eclipse開始工作。我運行該應用程序,它發送沒有錯誤的電子郵件。Java郵件:沒有供應商爲smtp
但是,當我創建的jar,並執行它,它在電子郵件發送部分失敗。 它給這個異常:
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中正常工作,我猜這些值是正確的,但問題在於創建jar。我不太瞭解創建jar時可能的結果或更改。 創建jar時,JavaMail庫會不會出錯?
你有什麼想法嗎?
非常感謝您回答這麼快。 我剛剛試過了你告訴我的,我不知道我是否以正確的方式做到了這一點: 在Eclipse中,在項目的屬性中,我看到在構建路徑中,在庫中:activation.jar ,mailapi.jar,smtp.jar ...在那裏。在訂單和出口,我已經檢查了這些罐子。他們沒有被檢查過。我再次導出了jar,但錯誤仍然存在。可能我做錯了什麼?也許我不應該從Eclipse中做到這一點?謝謝邁克。 – pablof 2010-06-05 13:24:11
我對eclipse不熟悉。但是這絕對是與類路徑相關的東西。下一步你可以改變你運行jar的方式。當你運行你的jar時,包含這兩個jar的路徑。所以關閉我的頭頂,像這樣:jar -cp ./full/path/to/activation.jar:./full/path/to/mail.jar -jar yourjarname.jar – Mike 2010-06-05 13:42:18
謝謝麥克。我會嘗試這個。 – pablof 2010-06-05 18:02:02