0

我创建了一个与电子邮件集成的应用程序,一切正常,但是当尝试连接到另一个邮件服务器(在客户服务器上部署之后)时,我在解析来自服务器的消息时收到一个转换错误。

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 的问题,还是应用程序服务器上的类加载器的问题?

4

2 回答 2

3

存在某种与类路径相关的问题。也许您的应用程序可以使用两个版本的 JavaMail 类?

于 2014-07-23T20:21:42.553 回答
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 准备好用于 jakarta mail 2.0

于 2021-01-12T21:47:31.737 回答