本地eml文件中附件的名字为中文为什么解析不了

梅梅 发布于 2013/02/27 14:02
阅读 472
收藏 0

代码如下,附件文件名是中文就解析不了,英文就可以~~哪位大侠可以帮小女解决一下~急!!

/**

 * eml格式的邮件解析附件
 * @author Administrator
 *
 */


public class MimeTest {  
  
    private StringBuffer txtBody;  
    private StringBuffer htmlBody;  
    private ArrayList<BodyPart> attachments;  


    /** 
     * 
     * @param fileName 
     */  
    public void parseMessage(String fileName) {  
        FileInputStream fis = null;  
  
        txtBody = new StringBuffer();  
        htmlBody = new StringBuffer();  
        attachments = new ArrayList<BodyPart>();  
  
        try {  
            //Get stream from file  
            fis = new FileInputStream(fileName);  
            Message mimeMsg = new Message(fis);  
  
            
            //Get custom header by name  
            Field priorityFld = mimeMsg.getHeader().getField("X-Priority");  
            //If header doesn't found it returns null  
            if (priorityFld != null) {  
                //Print header value  
                System.out.println("Priority: " + priorityFld.getBody());  
            }  
  
            //If message contains many parts - parse all parts  
            if (mimeMsg.isMultipart()) {  
                Multipart multipart = (Multipart) mimeMsg.getBody();  
                parseBodyParts(multipart);  
            } else {  
                //If it's single part message, just get text body  
                String text = getTxtPart(mimeMsg);  
                txtBody.append(text);  
            }  
  
            for (BodyPart attach : attachments) {  
                String attName = attach.getFilename();  
                //Create file with specified name  
                FileOutputStream fos = new FileOutputStream("C:/"+attName);  
                try {  
                    //Get attach stream, write it to file  
                    BinaryBody bb = (BinaryBody) attach.getBody();  
                    bb.writeTo(fos);  
                } finally {  
                    fos.close();  
                }  
            }  
  
        } catch (IOException ex) {  
        ex.printStackTrace();
            ex.fillInStackTrace();  
        } finally {  
            if (fis != null) {  
                try {  
                    fis.close();  
                } catch (IOException ex) {  
                    ex.printStackTrace();  
                }  
            }  
        }  
    }  
  
    /** 
     * This method classifies bodyPart as text, html or attached file 
     * 
     * @param multipart 
     * @throws IOException 
     */  
    private void parseBodyParts(Multipart multipart) throws IOException {  
        for (BodyPart part : multipart.getBodyParts()) { 
        System.out.println(part.getMimeType()+part.getFilename());
       
            if (part.isMimeType("text/plain")) {  
                String txt = getTxtPart(part);  
                txtBody.append(txt);  
            } else if (part.isMimeType("text/html")) {  
                String html = getTxtPart(part);  
                htmlBody.append(html);  
            } else if (part.getDispositionType() != null && !part.getDispositionType().equals("")) {  
                //If DispositionType is null or empty, it means that it's multipart, not attached file  
                attachments.add(part);  
            }  
  
            //If current part contains other, parse it again by recursion  
            if (part.isMultipart()) {  
                parseBodyParts((Multipart) part.getBody());  
            }  
        }  
    }  
  
    /** 
     * 
     * @param part 
     * @return 
     * @throws IOException 
     */  
    private String getTxtPart(Entity part) throws IOException {  
        //Get content from body  
        TextBody tb = (TextBody) part.getBody();  
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        tb.writeTo(baos); 
        return new String(baos.toByteArray());  
    }
    




    /** 
     * 
     * @param args 
     */  
    public static void main(String[] args) {  
  
        String eml = "e:/w.eml";  
  
        MimeTest parser = new MimeTest();  
        parser.parseMessage(eml);  
    }  
}
加载中
返回顶部
顶部