<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風(fēng)行天下

    JAVA太極
    posts - 4, comments - 10, trackbacks - 0, articles - 55
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    現(xiàn)在研究javamail的人越來越多,現(xiàn)在我就談?wù)勗趈avamail中大家都會遇到的附件中文問題,由于sun的java的中文問題,導(dǎo)致當附件是中文時將出現(xiàn)亂碼,導(dǎo)致程序異常,如何避免呢??我在學(xué)習(xí)javamail時采用如下方法首先對郵件體進行分析,首先判斷郵件體是否有附件:
     Object out_content = messag[i].getContent();
     if (!(out_content instanceof Multipart)){//不是復(fù)合郵件體,既是不帶附件。
                  partname = new String[0];
                  return partname;
               }

    如果是復(fù)合郵件體,那么就可以調(diào)用如下的方法取得中文文件名:
    public  static  String  getISOFileName(Part  body){  
                   //設(shè)置一個標志,判斷文件名從Content-Disposition中獲取還是從Content-Type中獲取  
                  
     boolean  flag=true;  
                   if(body==null){  
                           return  null;  
                   }  
                   String[]  cdis;  
                   try{  
                           cdis=body.getHeader("Content-Disposition");  
                   }  
                   catch(Exception  e){  
                           return  null;  
                   }  
                   if(cdis==null){  
                           flag=false;  
                   }  
                   if(!flag){  
                           try{  
                                   cdis=body.getHeader("Content-Type");  
                           }  
                           catch(Exception  e){  
                                   return  null;  
                           }  
                   }  
                   if(cdis==null){  
                           return  null;  
                   }  
                   if(cdis[0]==null){  
                           return  null;  
                   }  
                   //從Content-Disposition中獲取文件名  
                   if(flag){  
                           int  pos=cdis[0].indexOf("filename=");  
                           if(pos<0){  
                                   return  null;  
                           }  
                           //如果文件名帶引號  
                           if(cdis[0].charAt(cdis[0].length()-1)=='"'){  
                                   return  cdis[0].substring(pos+10,cdis[0].length()-1);  
                           }  
                           return  cdis[0].substring(pos+9,cdis[0].length());  
                   }else{  
                           int  pos=cdis[0].indexOf("name=");  
                           if(pos<0){  
                                   return  null;  
                           }  
                           //如果文件名帶引號  
                           if(cdis[0].charAt(cdis[0].length()-1)=='"'){  
                                   return  cdis[0].substring(pos+6,cdis[0].length()-1);  
                           }  
                           return  cdis[0].substring(pos+5,cdis[0].length());  
                   }  
           }  

    但是有一種情況下,取得的中文文件名也是亂碼,原因有的郵件服務(wù)器在發(fā)送郵件時,對附件名進行了特殊的編碼,解決如上問題的方法如下:
    首先:
    1)用如上的方法取得中文文件名:
    String filename= new String(getISOFileName(part).getBytes("ISO-8859-1"),"gb2312");
    然后創(chuàng)建文件,如果發(fā)生FileNotFoundException異常,說明取得的文件名是經(jīng)過特殊編碼的--我們?nèi)〉玫降奈唇獯a的,是亂嗎,那么就要用javamail提供的函數(shù)decodeText進行解碼。具體方法如下。
    try{
            myFileoutputstream= new FileOutputStream(filename);
        }catch(FileNotFoundException fe){
            try{
                  if (filepath.exists()){
                     filename = new File(filepath,MimeUtility.decodeText(getISOFileName(part)));
       }catch(Exception e){
        System.out.println("getpart(int i)重新生成文件:"+e.toString());
        }
       }catch(Exception e){
        System.out.println("getpart(int i)重新生成文件:"+e.toString());
        }
    }


    經(jīng)過如上步驟,就能徹底解決javamail附件中文名亂碼問題了。
    祝你好運,如果還有任何疑問,歡迎切磋,我的郵件:



    bill-轉(zhuǎn)自:csdn




    參與論壇討論:http://www.matrix.org.cn/forum.asp
    更多技術(shù)文章:http://www.matrix.org.cn/article.asp
    Matrix java門戶:http://www.matrix.org.cn
    原文地址:http://www.matrix.org.cn/article/1427.html
    任何獲得許可轉(zhuǎn)載此文章,須在顯著位置標明Matrix的原文地址,并做鏈接至原文頁面,查看詳細的版權(quán)說明

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久青草免费91线频观看站街| jizz中国免费| 久久WWW免费人成一看片| 久久久久无码精品亚洲日韩| 中国性猛交xxxxx免费看| 亚洲成a人片在线观看无码专区| 老司机亚洲精品影院无码 | 日韩视频在线免费| 四虎亚洲国产成人久久精品| 久久夜色精品国产嚕嚕亚洲av| 亚洲人成图片网站| 成人毛片免费观看视频大全| 亚洲国产精品无码观看久久| 青青操视频在线免费观看| 免费理论片51人人看电影| 成a人片亚洲日本久久| 免费v片视频在线观看视频| 久久青青草原亚洲AV无码麻豆| 无人在线观看免费高清| 亚洲成人黄色在线| 日本特黄a级高清免费大片| 免费人成又黄又爽的视频在线电影| 中文字幕乱码免费视频| 亚洲人AV在线无码影院观看| 国产精品偷伦视频观看免费| 久久久亚洲裙底偷窥综合| 天天干在线免费视频| 777亚洲精品乱码久久久久久 | 日韩精品极品视频在线观看免费| 亚洲精品91在线| 亚洲成a人一区二区三区| 三级黄色在线免费观看| 亚洲av无码一区二区三区天堂古代| 情侣视频精品免费的国产| 成人一区二区免费视频| 亚洲午夜国产精品| 亚洲国产一成久久精品国产成人综合 | 国产亚洲精品影视在线产品| 亚洲 暴爽 AV人人爽日日碰| 免费va人成视频网站全| 日韩在线不卡免费视频一区|