2011-07-27 2 views
2

私がやりたいことは、Javaで電子メールを送信することです。ここで私が見つけた例は次のとおりです。JavaでSimpleEmailクラスをインスタンス化すると、なぜこの例外が発生しますか?

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

私は私のプロジェクトでは、以下のJAR(Netbeansのを使用して)います: commons-email-1.2.jar

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();ラインに次の例外を取得

私は間違って何をしていますか?

ありがとうございました。

+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パッケージが必要です。

関連する問題