读取MimeMessage - MimeMultipart不能转换为MimeMultipart

时间:2014-07-23 10:59:02

标签: java javamail mime-message

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

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

2 个答案:

答案 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 做好准备