我创建了一个与电子邮件集成的应用程序,一切正常,但在尝试连接到另一个邮件服务器时(在客户服务器上部署之后),我在解析来自服务器的邮件时收到了一个转换错误。
java.lang.ClassCastException: javax.mail.internet.MimeMultipart can not be cast it javax.mail.internet.MimeMultipart
-
if ( contentType.contains( "text/plain" ) ) {
content = getFormatedHtmlFromString( object.toString() );
}
// check if text/html
else if ( contentType.contains( "text/html" ) ) {
content = object.toString();
}
else if ( contentType.contains( "multipart" ) ) {
MimeMultipart mmp = (MimeMultipart) object;
}
这个问题对我来说很奇怪,因为我可以解析日期,主题等信息,但不能解析内容。
邮件服务器和javax api是否只有版本/标准差异?它是javax api的问题,还是应用程序服务器上类加载器的问题?
答案 0 :(得分:3)
存在某种与类路径相关的问题。也许您的应用程序可以使用两个版本的JavaMail类?
答案 1 :(得分:0)
我尝试将 jakarta.mail 从 1.6.x 更新到 2.0.0 后遇到了同样的问题。
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
<version>2.0.0</version>
</dependency>
1.6 = javax.mail.internet.MimeMessage 2.0 = jakarta.mail.internet.MimeMessage
两个类不兼容。我的问题出现了,因为我现在1.6版本也用greenmail库,但是greenmail用的是intern javax.mail。
import jakarta.mail.internet.MimeMessage;
SMTP_SERVER = new GreenMail(ServerSetupTest.SMTPS);
SMTP_SERVER.start();
SMTP_SERVER.setUser("john.doe@localhost", "JohnDoe", "s3cr3t");
MimeMessage msg = (MimeMessage) SMTP_SERVER.getReceivedMessages();
任何将旧的 MimeMessage 转换为新类的尝试都失败了。
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
><version>1.6.1</version>
<scope>test</scope>
</dependency>
在当前情况下,一个肮脏的黑客正在工作,在测试范围中添加旧的 JavaMail 1.6 依赖项,直到 greenmail 为雅加达邮件 2.0 做好准备