0

我正在尝试运行一个程序来使用 javamail 发送邮件。

它编译成功,但是当我运行它时,它给出了下面提到的错误。

线程“主”java.lang.NoClassDefFoundError 中的异常:javamail1_4_5/SendEma il(错误名称:SendEmail)

问题

  1. 除了在 classpath 中复制 mail.jar 和 activation.jar 之外,运行该程序是否需要任何设置。我已经复制了 C:\Program Files\Java\jdk1.7.0\jre\lib\ext 和 .java 文件中的这两个文件位于 java\jdk1.7.0\bin 文件夹中。

2.执行这个程序是否需要任何服务器?

这是代码

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail
{
   public static void main(String [] args)
   {    
      // Recipient's email ID needs to be mentioned.
      String to = "abc@gmail.com";

      // Sender's email ID needs to be mentioned
      String from = "xyz@gmail.com";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();

      // Setup mail server
      properties.setProperty("mail.smtp.host", host);

      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);

      try{
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}
4

1 回答 1

0

java.lang.NoClassDefFoundError:javamail1_4_5/SendEmail(错误名称:SendEmail)

这基本上意味着您已将类文件放在名为的文件夹中javamail1_4_5,并且您试图将其作为java javamail1_4_5.SendEmail. 此类应具有package与文件夹匹配的声明。

package javamail1_4_5;

但是,SendEmail错误消息中的名称暗示根本没有包。您有 2 个选项:

  1. 将该包声明添加到类的顶部(并重新编译)。
  2. cd进入javamail1_4_5文件夹并通过java SendEmail.

与具体问题无关,将与 JRE 本身无关的任意 JAR 文件放在 JRE 中,/lib或者/lib/ext是一种不好的做法。它完全破坏了便携性。使用-cpor-classpath参数或将其打包在 JAR 中。如有必要,使用 bat/cmd 文件保存重复的命令。将源/类文件放在 JRE 的安装文件夹中也没有任何意义。您不需要这样做。

于 2013-01-26T12:30:33.160 回答