IO异常的时候是这个:no object DCH for MIME type application/vnd.ms-excel
解决方案 »
- jsp提交 选项卡2提交 结果显示在选项卡1中 求解
- JScrollBar监听事件addAdjustmentListener问题
- extjs,请高手指点
- linux_x86_64下weblogic10.3.3 session问题
- JS表单提交
- 帮忙推荐下hibernate和spring方面比较好的书籍
- 如何判断超时问题,请各位高手指教!!!谢谢!!!
- import javax.mail.*;提示找不到,是否需要给jdk添加额外的包?
- 哪里有ejb部署文件的 dtd描述
- 声明为static的函数为什么可以调用类的构造函数
- jndi hibernate tomcat的问题
- EJB开发分布试 系统时候 更新语句是什么 不要批量更新的
谢谢。
第一个问题解决了,SendFailedException这个类里面取出invalidAdress就可以了。
但是第二个问题,还在等待。
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/vnd.ms-excel
上面这句话是异常部分。
真郁闷,真的没有办法了。问题接二连三。
粗略的看了一下楼主的问题,不是十分的清楚,就当自己看到的只是关于mail邮件的问题吧
第一可能是关于版本不符的时候出现的异常情况,其次就是代码中出现的问题(这里也是由于包版本造成的吧)其实这个应该不是太大的问题,你在低级或者是高级的包中能够运行,然后调整了不同版本(但是都是同一类的包)这样,就算你把程序修改一下,继续调试,应该也不会做太大的修改,可能就是一点点实质性的修改,因为用到的包里面的东西换了,
我做过一点mail的东西,但是不深,就是发送接受,拦截,之类,一些简单的处理,没有遇到太大的问题,所以不敢妄自说什么,希望楼主能够解决。
谢谢提醒,原因基本上可以明白些了,ByteArrayDataSource类不能用,这个类实现了DataSource接口,就像FileDataSource一样,只不过一个是处理二进制,一个是处理文件的,现在项目的后期就不能添加新类了,只能修改代码,添加方法,所以暂时没有找到好的解决办法。
我现在是不能用,因为我是从数据库中取出来的byte【】型的数据,现在的问题是怎么能将这个byte【】型转化成DataSource,从而能放到MimeBodyPart中,setContent(Object,String)这个不行,总是出现java.io.IOException: "text/plain" DataContentHandler requires String object, was given object of type class [B
或者javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/vnd.ms-excel 这样的异常,两个异常上面是我发送的文本文件做为附件,下面的异常是我发送的excel的附件。
帮楼主顶一下吧!
希望楼主早日解决问题!
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(datasource);
mBodyPart = new MimeBodyPart(byteArrayInputStream);
的时候,text/plain这样类型的附件是可以正常发送的,但是其他的类型就全然不能发送了。异常:
java.io.IOException: Error in encoded stream, got 2
at com.sun.mail.util.BASE64DecoderStream.decode(BASE64DecoderStream.java:148)
at com.sun.mail.util.BASE64DecoderStream.read(BASE64DecoderStream.java:53)
at com.sun.mail.util.BASE64DecoderStream.read(BASE64DecoderStream.java:78)
at java.io.FilterInputStream.read(Unknown Source)
.......
如果这样处理:
mBodyPart = new MimeBodyPart();
mBodyPart.setDataHandler(new DataHandler(datasource,type));
的时候,text/plain类型的下面的异常
"text/plain" DataContentHandler requires String object, was given object of type class [B
at com.sun.mail.handlers.text_plain.writeTo(text_plain.java:103)
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:839)
at javax.activation.DataHandler.writeTo(DataHandler.java:295)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1147)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:668)
其他类型的就是
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/vnd.ms-excel
红色部分就是相应的异常。
还在解决中,希望熟悉javamail的高手们提意见。
是因为dataHandler中找对应的文件mailcap中没有找到你设置的类型所以dch=null
采用setContent(Object,value)需要setCommandMap,setDataContentHandlerFactory设置的支持,目前不清楚如何解决 换一种思路 创建
private boolean creatMailBodyPartToFile(byte[] bytes,String fileName){
boolean bl = false;
try
{
FileOutputStream fileOutputStream = new FileOutputStream(fileName);
try {
fileOutputStream.write(bytes);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(FileNotFoundException e)
{
bl = false;
RuntimeException re = new RuntimeException((new StringBuilder())
.append("Failed in opening specified file. FileName=")
.append(fileName).toString());
re.initCause(e);
throw re;
}
}删除
private boolean deleteMailBodyPartFile(String fileName){}
ds = new FileDataSource(file);
mBodyPart = new MimeBodyPart();
dataHandler = new DataHandler(ds);
mBodyPart.setDataHandler(dataHandler);