2011-07-27 22 views
2

我想要做的就是用Java發送電子郵件。下面是我發現的例子:當我在Java中實例化一個SimpleEmail類時,爲什麼會得到這個異常?

import org.apache.commons.mail.SimpleEmail; 

public class Email { 

    public static void sendMessage(String emailaddress, String subject, String body) { 
     try { 
      SimpleEmail email = new SimpleEmail(); 
      email.setHostName("valid ip address here"); 
      email.addTo(emailaddress); 
      email.setFrom("[email protected]", "No reply"); 
      email.setSubject(subject); 
      email.setMsg(body); 
      email.send(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

我立刻坐上SimpleEmail email = new SimpleEmail();線以下異常:

java.lang.ClassNotFoundException: org.apache.commons.mail.SimpleEmail 

我已經在我的項目下面的JAR(使用NetBeans): commons-email-1.2.jar

我在做什麼錯?

謝謝。

+0

我的猜測是common-email.jar與您的示例代碼不兼容。打開common-email.jar(取消存檔),看看你是否有這個類。 (SimpleEmail)。(或者你可以使用你的IDE來檢查simpleEmail是否存在)。 –

回答

1

不確定爲什麼SimpleEmail不起作用。但這樣做:

import javax.mail.*; 
    import javax.mail.internet.*; 

    import java.util.Properties; 

    public class Email { 

    public static void sendMessage(String emailaddress, String subject, String body) { 
     try { 
      Properties props = new Properties(); 
      props.setProperty("mail.transport.protocol", "smtp"); 
      props.setProperty("mail.host", "myhost"); 

      Session mailSession = Session.getDefaultInstance(props, null); 
      Transport transport = mailSession.getTransport(); 

      MimeMessage message = new MimeMessage(mailSession); 
      message.setSubject("Testing javamail plain"); 
      message.setContent("This is a test", "text/plain"); 
      message.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]")); 

      transport.connect(); 
      transport.sendMessage(message, 
        message.getRecipients(Message.RecipientType.TO)); 
      transport.close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
    } 

感謝您的建議。

+1

+1向我展示了燈光。我有和你一樣的經驗。 – Withheld

+0

謝謝。 +1馬上回到你身邊。 :-) – cbmeeks

0

SimpleEmail類在那裏,你有正確的包,所以我不得不說這是你的項目的NetBeans配置中的一個問題。

由於這是一個簡單的例子,您可以嘗試從命令行編譯並將JAR添加到類路徑中。它應該工作。然後您可以找出爲什麼NetBeans中沒有找到它。

0

您還可以將項目的源代碼添加到您的src文件夾。但是大多數時候,一個乾淨的&構建有助於解決這些問題。

如果沒什麼幫助,關閉netbeans,手動刪除項目的dist文件夾,再次啓動netbeans並執行一個乾淨的&構建。幫助我擺脫了一個神祕的問題。

+0

我只是這樣做,它並沒有幫助。用Java發送電子郵件還有另一種選擇嗎?當然,這不可能是如此艱難。感謝 – cbmeeks

2

我試圖運行你的代碼,並得到這個:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Message 
    at javaapplication3.Email.sendMessage(Email.java:9) 
    at javaapplication3.JavaApplication3.main(JavaApplication3.java:7) 
Caused by: java.lang.ClassNotFoundException: javax.mail.Message 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
... 2 more 
Java Result: 1` 

似乎有些進口丟失。你需要javax.mail包來運行你的代碼。

相關問題