当我在Java中实例化SimpleEmail类时,为什么会出现此异常?

时间:2011-07-27 15:40:06

标签: java email smtp apache-commons

我想做的就是用Java发送电子邮件。以下是我发现的例子:

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("noreply@example.com", "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

我做错了什么?

感谢。

4 个答案:

答案 0 :(得分: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包来运行您的代码。

答案 1 :(得分: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("test@example.com"));

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

感谢您的建议。

答案 2 :(得分:0)

SimpleEmail类在那里,你有正确的包,所以我不得不说这是你项目的NetBeans配置中的一个问题。

由于这是一个简单的示例,您可以尝试从命令行进行编译,并以这种方式将JAR添加到类路径中。它应该工作。然后你可以弄清楚为什么它没有在NetBeans中被选中。

答案 3 :(得分:0)

您还可以将项目的源代码添加到src文件夹中。但大多数时候一个干净的&构建有助于解决这些问题。

如果没有任何帮助,关闭netbeans,手动删除构建&你项目的dist文件夹,再次启动netbeans并执行一个干净的&建立。出于一个神秘的问题帮我一次。