【问题标题】:Spring JavaMailSender, Tomcat, JNDISpring JavaMailSender、Tomcat、JNDI
【发布时间】:2015-04-27 20:29:25
【问题描述】:

我一直在努力解决这个问题,我已经厌倦了那种粘糊糊的声音。

我需要在 Tomcat 平台上配置一个 JavaMail 实例。当然,我不想在 war 文件中硬编码连接参数,所以我一直在尝试建立 JNDI 配置。但是,我收到一个异常,提示存在类路径问题(由:java.lang.NoClassDefFoundError:javax/mail/Authenticator 引起)。这是我的代码:

    <Resource name="mail/Session"
          auth="Container"
          type="javax.mail.Session"
          username="jpulcifer@gmail.com"
          password="Camp1onelcap"
          mail.debug="true"
          mail.user="jpulcifer@gmail.com"
          mail.password="Camp1onelcap"
          mail.transport.protocol="smtp"
          mail.smtp.host="smtp.gmail.com"
          mail.smtp.auth="false"
          mail.smtp.port="465"
          mail.smtp.starttls.enable="false"/>

        Session mailSession = null;

    try {
        mailSession = InitialContext.doLookup("java:comp/env/mail/Session");

我不知道该怎么办。我已经阅读了一些 cmets 将 mail.jar 和 activation.jar 复制到 [TOMCAT_HOME]/lib,但这似乎......很尴尬。另外,我不确定如何在开发环境(Eclipse)中执行此操作。有人可以指出我正确的方向吗?我真的被困在这里了;这似乎不是一件难事,但显然我证明是错误的。

【问题讨论】:

    标签: java eclipse tomcat jakarta-mail jndi


    【解决方案1】:

    如果您没有将mail.jar 放在Tomcat 的lib 目录中,那么您将它放在哪里?你应该可以把它放在WEB-INF/lib directory中。

    【讨论】:

    • 它在war文件中。这是一个在 Eclipse 类路径中解析的 Maven 依赖项。
    • 你确定maven依赖实际上导致它被放入war文件中,而不仅仅是在编译时使用吗?您是否依赖 Maven 或 Eclipse 来部署 war 文件?如果你提取war文件并手动部署它,它可以工作吗?
    【解决方案2】:

    通过声明资源,您是在向服务器请求该资源,在本例中是与邮件服务器的连接。提供资源的是服务器,因此 jar 应该在服务器的类路径中,而不是 Web 应用程序(使用单独的类加载器)的类路径中。

    所以 javax.mail.jar 应该在 TOMCAT-HOME/lib 中。

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 2012-05-28
      • 2015-12-11
      • 1970-01-01
      • 2016-12-06
      • 2017-05-21
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多