Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在部署在Glassfish上的应用程序中发送电子邮件_Java_Glassfish_Classcastexception_Jakarta Mail - Fatal编程技术网

Java 无法在部署在Glassfish上的应用程序中发送电子邮件

Java 无法在部署在Glassfish上的应用程序中发送电子邮件,java,glassfish,classcastexception,jakarta-mail,Java,Glassfish,Classcastexception,Jakarta Mail,我花了两天的时间来处理这个问题,在谷歌上到处搜索,但仍然无法解决,让我们看看是否有人发现我做错了什么: 我在Glassfish中定义了一个javaMail会话,其中包含与邮件服务器通信所需的所有参数(主机、用户、密码、端口等)。我部署了一个应用程序,它使用jndi查找该会话并尝试发送电子邮件。代码是: InitialContext ctx = new InitialContext(); Session session = (Session) ctx.lookup("mail/javaMailSe

我花了两天的时间来处理这个问题,在谷歌上到处搜索,但仍然无法解决,让我们看看是否有人发现我做错了什么:

我在Glassfish中定义了一个javaMail会话,其中包含与邮件服务器通信所需的所有参数(主机、用户、密码、端口等)。我部署了一个应用程序,它使用jndi查找该会话并尝试发送电子邮件。代码是:

InitialContext ctx = new InitialContext();
Session session = (Session) ctx.lookup("mail/javaMailSession");

Message msg = new MimeMessage(session);  
msg.setSubject("test");  
msg.setRecipient(RecipientType.TO, new InternetAddress("zzz@yyy.com", "zzz"));    
msg.setFrom(new InternetAddress("jjjj@kkkk.com", "hhh"));  
BodyPart messageBodyPart = new MimeBodyPart();  
messageBodyPart.setText("this is a test email");

Transport.send(msg);  
现在,如果我在没有mail.jar依赖项的情况下部署我的应用程序,那么当加载包含此代码的类时,我会得到一个

ClassNotFoundException:javax.mail.Message,意思是mail.jar不在类路径中。

如果我将mail.jar放入domain/lib文件夹,或者只是在我的应用程序清单中添加一个类路径条目,包括mail.jar的位置,我就不再有
ClassNotFoundException
,但是当执行查找并检索会话时,我会得到最奇怪的结果

ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session.
这意味着我有两个版本的mail.jar,但正如我所说的,如果我从/lib中删除它,或者不将classpath条目添加到清单中,它甚至找不到一个


我使用的是Ubuntu 11.10,使用的是Glassfish 3.1.1java-6-sun-1.6.0.26(因此activation.jar不是问题)。任何想法都会很受欢迎,因为我想不出其他任何东西。

JavaMail(所有javax.mail.*类)包含在GlassFish中(假设您使用的是完整的JavaEE平台版本,而不仅仅是Web概要文件版本);您不需要在应用程序中包含mail.jar或手动安装它。我无法解释为什么这样做时找不到javax.mail.Message。ClassCastException表示应用程序有两个版本的mail.jar可用。

我发现了错误。代码在一个库jar中,我想让几个项目共享,所以我将其放在domain1/lib/ext中(在domain1/lib/applibs中它不起作用)。在这个库中,我使用了JDBC连接池和其他服务器资源,除了电子邮件之外,没有问题。我将库移动到domain1/lib,现在我的代码找到了javax.mail.*。我不知道这是否是一个奇怪的行为或那些文件夹是为了其他目的,这只是我的误解。。。无论如何,谢谢你的帮助,问题解决了!我认为lib/ext目录在JDK类之前加载,lib目录在JDK类之后加载。