IO异常的时候是这个:no object DCH for MIME type application/vnd.ms-excel

解决方案 »

  1.   

    java.io.IOException: Error in encoded stream: found valid base64 character after a padding character (=), the 10 most recent characters were: "1+\225\159\127\254q\239=w"
      

  2.   


    谢谢。
    第一个问题解决了,SendFailedException这个类里面取出invalidAdress就可以了。
    但是第二个问题,还在等待。
    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/vnd.ms-excel
    上面这句话是异常部分。
      

  3.   

    java.io.IOException: "text/plain" DataContentHandler requires String object, was given object of type class [B
    真郁闷,真的没有办法了。问题接二连三。
      

  4.   

    呵呵,
    粗略的看了一下楼主的问题,不是十分的清楚,就当自己看到的只是关于mail邮件的问题吧
    第一可能是关于版本不符的时候出现的异常情况,其次就是代码中出现的问题(这里也是由于包版本造成的吧)其实这个应该不是太大的问题,你在低级或者是高级的包中能够运行,然后调整了不同版本(但是都是同一类的包)这样,就算你把程序修改一下,继续调试,应该也不会做太大的修改,可能就是一点点实质性的修改,因为用到的包里面的东西换了,
    我做过一点mail的东西,但是不深,就是发送接受,拦截,之类,一些简单的处理,没有遇到太大的问题,所以不敢妄自说什么,希望楼主能够解决。
      

  5.   


    谢谢提醒,原因基本上可以明白些了,ByteArrayDataSource类不能用,这个类实现了DataSource接口,就像FileDataSource一样,只不过一个是处理二进制,一个是处理文件的,现在项目的后期就不能添加新类了,只能修改代码,添加方法,所以暂时没有找到好的解决办法。
      

  6.   

    DataSource source = new FileDataSource(fileAttachment); 
    我现在是不能用,因为我是从数据库中取出来的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的附件。 
      

  7.   

    没接触过mail的东西
    帮楼主顶一下吧!
    希望楼主早日解决问题!
      

  8.   

    做java 的兄弟们,有没有想加入IBM的,请联系我[email protected]
      

  9.   

    谢谢大家的关注,我白天没有时间研究,只有晚上有时间研究,现在我看了几乎所有相关的class文件,还是没有解决问题,但是收获很多,javamail真的还有很多需要完善的地方,就关于BASE64DecoderStream的处理还是不够的,也就是说不够国际化,由于我这个问题客户方必须要使用javamail1.3而导致,其实用1.4的话就很容易解决的,上面的问题我做了这样的处理:
    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的高手们提意见。
      

  10.   

    javax.activation.UnsupportedDataTypeException: no object DCH for MIME type application/msword 
    是因为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);