【问题标题】:Why am I getting this exception when I instantiate a SimpleEmail class in Java?为什么在 Java 中实例化 SimpleEmail 类时会出现此异常?
【发布时间】:2011-10-14 09:36:56
【问题描述】:

我只想用 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

我做错了什么?

谢谢。

【问题讨论】:

  • 我的猜测是 common-email.jar 与您的示例代码不兼容。打开 common-email.jar(取消归档),看看你是否有那个类。 (SimpleEmail)。(或者您可以使用您的 IDE 检查 simpleEmail 是否存在)。

标签: java email smtp apache-commons


【解决方案1】:

我尝试运行你的代码并得到了这个:

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 包来运行您的代码。

【讨论】:

    【解决方案2】:

    不知道为什么 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();
            }
         }
      }
    

    感谢您的建议。

    【讨论】:

    • +1 向我展示了光明。我和你有完全相同的体验。
    【解决方案3】:

    SimpleEmail 类在其中,并且您拥有正确的包,所以我不得不说这是您项目的 NetBeans 配置中的问题。

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

    【讨论】:

      【解决方案4】:

      您也可以将项目的源代码添加到您的 src 文件夹中。但大多数情况下,清理和构建有助于解决这些问题。

      如果没有任何帮助,请关闭 netbeans,手动删除项目的 build & dist 文件夹,再次启动 netbeans 并执行 clean & build。曾经帮我解决了一个神秘的问题。

      【讨论】:

      • 我只是这样做了,但没有帮助。除了用 Java 发送电子邮件,还有其他选择吗?当然不可能这么难。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      相关资源
      最近更新 更多