【问题标题】:error in running javamail program on windows 7在 Windows 7 上运行 javamail 程序时出错
【发布时间】:2013-01-26 20:30:33
【问题描述】:

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

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

线程“main”中的异常 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();
      }
   }
}

【问题讨论】:

    标签: java jakarta-mail noclassdeffounderror


    【解决方案1】:

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

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

    package javamail1_4_5;
    

    但是,错误消息中的名称SendEmail 暗示根本没有包。你有两个选择:

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

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

    【讨论】:

    • 谢谢。这对我帮助很大。
    猜你喜欢
    • 2014-03-05
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2012-02-09
    • 2012-11-23
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多