您的位置:首页 > 移动开发 > Objective-C

Java mail包出现"MimeMessage contains object of type javax.mail.util.SharedByteArrayInputStream instead of MimeMultipart"错误的修正办法

2007-06-25 14:00 501 查看
这个问题曾出现于本人制作的java mail应用程序部署中。在IDE中未出现任何问题,只是在打包部署时(我是将java mail的所有class文件与我开发的程序一同打到jar中便于部署),一发mail就在Transport.send()时报此异常。

这个问题,直译的解释是,在发送邮件时,MimeMessage中包含的对象是javax.mail.util.SharedByteArrayInputStream,而不是MimeMultipart。但是就算收到的邮件原封不动地发出去,也还是会报同样的错,而且在IDE里面没问题,打成jar包运行就报错。于是便猜想,应该是环境问题。上网搜这个报错,国内的论坛、网站上,根本找不到对这一错误地解决办法描述,后来在一英文论坛上,发现了端倪。

原来,java mail这个工具包的那个jar,有很多引用到的文件,并没有放到class文件的文件夹下,而是放到了jar文件的META-INF文件夹下,其中就有很重要的mailcap文件。这个文件是用来parse MimeMessage用的,没有了这个文件,message就不会被parse成MimeMultipart,而是会直接以字节流的方式交给Transport类来发送。而Transport类不能发送字节流内容。

在我的这个case里面,由于我是把java mail的class文件直接加到我的jar包中,所以java mail的jar文件中的META-INF的内容就被丢弃了。解决方法很简单,转而将我自己写的程序的包、class文件打到java mail的jar里面,然后在MANIFEST.MF的第二行里面指明自己的主类就可以了。(加入Main-Class: XXXX.XXXX就可以了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐