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

标签 java glassfish classcastexception jakarta-mail

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

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

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 文件夹中,或者只是将类路径条目添加到我的应用程序 list 中(包括 mail.jar 的位置),我将不再遇到 ClassNotFoundException,但是当查找时被执行并且我检索 session ,我得到了最奇怪的

ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session.

这意味着我有两个版本的 mail.jar,但正如我所说,如果我从/lib 中删除它或不将类路径条目添加到 list 中,它甚至找不到一个版本。

我使用的是Ubuntu 11.10,使用Glassfish 3.1.1java-6-sun-1.6.0.26(所以激活。 jar 不是问题)。任何想法都会非常感激,因为我想不出其他的了。

最佳答案

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

关于java - 无法在 Glassfish 上部署的应用程序中发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017555/

相关文章:

Java Rect.intersects() 有时不工作

java 8 UnsupportedOperationException on subList.clear()

java - 对参数具有特定约束的通用函数

java - @Singleton、@Startup、@PostConstruct 不适用于 EJB3.1 和 Glassfishv3.0.1

Java.swing.ComboBox 不能在 Button classException 上转换

java - 按日期降序排序列表 - groovy madness

jsf - 如何在弹出面板中提交值?

Java EE - 谁实现规范?

java.lang.ClassCastException : java. lang.String 无法转换为 [Ljava.lang.Object; - 使用 hibernate 从数据库中获取查询

java - 无法将以我的自定义对象作为其数据类型的 ArrayList 转换为相应的常规数组