首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.lang.NoClassDefFoundError: javax/mail/Authenticator,怎么了?

java.lang.NoClassDefFoundError: javax/mail/Authenticator,怎么了?
EN

Stack Overflow用户
提问于 2009-10-27 10:45:55
回答 7查看 122.2K关注 0票数 34

发送给Email.java

代码语言:javascript
运行
复制
package helper;

//Mail.java - smtp sending starttls (ssl) authentication enabled
//1.Open a new Java class in netbeans (default package of the project) and name it as "Mail.java"
//2.Copy paste the entire code below and save it.
//3.Right click on the file name in the left side panel and click "compile" then click "Run"

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

public class sendToEmail
{
    String  d_email = "sample@gmail.com",
     d_password = "mysamplepassword",
     d_host = "smtp.gmail.com",
     d_port  = "465",
     //m_to = "sample@yahoo.com",
     m_subject = "trial",
     m_text = "Hey, this is the testing email.";

    public sendToEmail(String strEmailAddress)
    {


        Properties props = new Properties();
        props.put("mail.smtp.user", d_email);
        props.put("mail.smtp.host", d_host);
        props.put("mail.smtp.port", d_port);
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.auth", "true");
        //props.put("mail.smtp.debug", "true");
        props.put("mail.smtp.socketFactory.port", d_port);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        SecurityManager security = System.getSecurityManager();

        try
        {
            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);
            //session.setDebug(true);

            MimeMessage msg = new MimeMessage(session);
            msg.setText(m_text);
            msg.setSubject(m_subject);
            msg.setFrom(new InternetAddress(d_email));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(strEmailAddress));
            Transport.send(msg);
        }
        catch (Exception mex)
        {
            mex.printStackTrace();
        } 
    }

    public class SMTPAuthenticator extends javax.mail.Authenticator
    {
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(d_email, d_password);
        }
    }
}

我的 controller.java部分

代码语言:javascript
运行
复制
/* Send to Email will run properly soon */
            sendToEmail email = new sendToEmail(strEmailAddress);

当我运行我的web应用程序时,我收到一条错误消息,上面写着:

类型异常报告 消息 服务器遇到一个内部错误(),无法完成此请求。 异常javax.servlet.ServletException: Servlet执行引发异常 根本原因: javax/mail/Authenticator controller.RegisterTenantController.doPost(RegisterTenantController.java:108) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

我现在该怎么办?有人能帮我把这个网络应用程序成功吗?

EN

回答 7

Stack Overflow用户

发布于 2009-10-27 11:09:29

您需要向webapp / lib目录或webapp(或服务器的lib目录)添加两个jars:

票数 51
EN

Stack Overflow用户

发布于 2009-10-27 16:08:43

虽然这可能是因为您的类路径中缺少一个jar文件,但它可能不是。

在这种情况下,在我们头脑中保留两、三个不同的例外海峡是很重要的:

  1. java.lang.ClassNotFoundException此异常表示类未在类路径上找到。这表明我们试图加载类定义,类路径上不存在类。
  2. java.lang.NoClassDefFoundError此异常表示JVM在其内部类定义数据结构中查找类的定义,但没有找到它。这与说它不能从类路径加载是不同的。通常情况下,这表明我们以前试图从类路径加载类,但由于某种原因它失败了--现在我们再次尝试,但是我们甚至不会尝试加载它,因为我们在前面加载它失败了。早期的故障可能是ClassNotFoundExceptionExceptionInInitializerError (指示静态初始化块中的故障)或任何其他问题。关键是,NoClassDefFoundError不一定是类路径问题。

我会查看javax.mail.Authenticator的源代码,看看它在它的静态初始化程序中做了什么。(查看静态变量初始化和静态块(如果存在的话)。如果您没有在ClassNotFoundException之前获得NoClassDefFoundError,那么几乎可以保证它是一个静态初始化问题。

当主机文件错误地定义本地主机地址和静态初始化块依赖于InetAddress.getLocalHost()时,我经常看到类似的错误。0.0.1应该指向“localhost”(可能还有localhost.localdomain)。它不应该指向机器的实际主机名(尽管由于某种原因,许多老的RedHat Linux安装程序喜欢错误地设置它)。

票数 27
EN

Stack Overflow用户

发布于 2012-08-13 23:29:53

向maven依赖项添加以下内容

代码语言:javascript
运行
复制
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.5</version>
    </dependency>

    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1630002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档