2010-11-18 9 views
3

javamail을 사용하여 전자 메일 처리를 자동화하고 있습니다.javamail을 사용하여 첨부 파일 내용 가져 오기

pop3 서버에 연결하여 메시지를 가져올 수있었습니다. 그들 중 일부는 첨부 파일을 포함하고 있습니다. 이메일 제목을 기준으로 가져와야하는 첨부 파일의 파일 이름을 "예측"할 수 있습니다.

그러나 나는이 기능은 아주 잘 작동

public byte[] searchForContent(Part part,String fileName){ 
    if(part.getFileName()!=null){ 
     if(part.getFileName().equals(fileName)){ 
      byte[] content = new byte[part.getSize()]; 
      part.getInputStream().read(content); 
      return content[] 
     } 
    } 
    return null; 
} 

기능을 가지고 그 내용 :(

를 얻을 수 없다 (예 : 부품이 파일 이름을 기준으로 설명 첨부했다 경우에만 반환 내용) . 그러나 배열의 반환이 너무 큽니다.

다운로드 된 첨부 파일은 256 바이트이고 함수는 352 바이트 내용을 반환.

나는 그쪽으로 생각 문제는 헤더에서 오는 것이지만 나는 확신 할 수 없다.

어떻게 콘텐츠를 가져 오시겠습니까?

감사합니다. 그것은 가치가 무엇인지에 대한

+0

:

그래서 아래의 코드는 예상 된 결과를 제공합니까? 지정된 파일을 생성합니까? 그렇다면 너무 클 수 있습니다. –

+0

바탕 화면에 첨부 파일을 다운로드하고 크기를 확인하면 256 바이트가됩니다. 그러나 동일한 첨부 파일의 경우이 코드를 실행할 때 반환되는 배열의 길이는 352 바이트입니다. – almathie

답변

0

마지막으로 해결책을 찾았습니다.

eaj가 말한대로 : part.getSize()는 파트 객체의 크기를 반환합니다. 첨부 파일 자체의 크기가 아닙니다.

그러나 part.getInputStream()에 의해 반환 된 InputStream에는 첨부 파일의 내용 만 들어 있습니다. 당신이 너무 큰 의미합니까 무엇

public byte[] searchForContent(Part part,String fileName){ 
    if(part.getFileName()!=null){ 
     if(part.getFileName().equals(fileName)){ 
      InputStream stream=part.getInputStream(); 

      byte[] buffer = new byte[512]; 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

      int bytesRead; 
      while ((bytesRead = stream.read(buffer) != -1) 
      { 
       baos.write(buffer, 0, bytesRead); 
      } 
      return baos.toByteArray(); 
     } 
    } 
    return null; 
} 
0

javax.mail.Part.getSize()에 대한 API 문서는 크기가 내용의 크기의 정확한 측정치가 아닌 경우가있어, 컨텐츠의 전송 인코딩을하지 않을 수 있음을

주를 말한다. 이 크기는 사용자 인터페이스에 표시하기에 적합하여 사용자에게이 부분의 크기에 대한 대략적인 정보를 제공합니다.

콘텐츠 유형을 알고 있다고 가정하면 Part.getContent()에서 가져 와서 처리 할 수 ​​있습니다. getContent()은 Object를 반환하지만 콘텐츠 유형을 알고 있다면 적절하게 캐스팅 할 수 있습니다 (예 : 텍스트의 String).

관련 문제