2013-02-15 58 views
0

最近我通过oracle-javamail从我的电子邮件下载CSV时遇到了问题。我发现第一个可以正常工作(来自大型机服务器),但是第二个csv附件看起来像是“application/vnd.ms-excel”,当它明显是一个.csv文件就像另一个文件下载完全正常。oracle-javamail csv附件下载

我在他们两个上都使用了相同的代码,并且在这个问题上找不到任何信息。

如果我转发给我自己的电子邮件,我可以神奇地下载附件没有任何问题。任何帮助,将不胜感激。一旦我得到这个工作,另一个日常任务就自动完成

if(content instanceof java.lang.String){ 
    //emailBody = (String)content; 
} else if(content instanceof Multipart){ 
    System.out.println("is Multipart"); 
    Multipart mp = (Multipart)content; 
    for (int j=0; j < mp.getCount(); j++) { 
     Part part = mp.getBodyPart(j); 
     String disposition = part.getDisposition(); 
     if (disposition == null) { 
      // Check if plain 
      MimeBodyPart mbp = (MimeBodyPart)part; 
      if (mbp.isMimeType("text/plain")) {        
       //emailBody += (String)mbp.getContent(); 
      } else {        
       // Special non-attachment cases here of 
       // image/gif, text/html, ...         
       String fileName = decodeName(part.getFileName()); 
       File savedir = new File(path+"\\"+fileName); 
       saveFile(savedir, part);         
      } 
     } else if ((disposition != null) && 
       (disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE))){ 
       // Check if plain 
       MimeBodyPart mbp = (MimeBodyPart)part; 
       if (mbp.isMimeType("text/plain")) {        
        System.out.println("has disp of plain"); 
        //emailBody += (String)mbp.getContent(); 
       } else {        
        System.out.println("has disp of else"); 
        String fileName = decodeName(part.getFileName()); 
        File savedir = new File(path+"\\"+fileName); 
        saveFile(savedir, part);      
       } 
     } 
    } 
} 
else{ 
    System.out.println(message.getContentType()); 
} 

回答

0

尽管看起来java知道它接收的是什么类型的电子邮件,但事实证明它没有。由于这不是标准类型,因此它会将其作为输入流返回。我可以用下面的代码看到文件的内容。

另请注意,这仅作为应用程序/ vnd.ms-excel文件类型的唯一原因是因为电子邮件的正文为空。

 InputStream emailIn = (InputStream) message.getContent(); 
    Scanner s = null; 
    try{ 
     s = new Scanner(emailIn).useDelimiter("\\A"); 
    while(s.hasNext()) 
     System.out.println(s.next()); 
    } 
    finally{ 
     s.close(); 
    }