2012-08-07 2 views
0

javamail을 사용하여 android에서 이메일을 가져오고 싶습니다. 하지만 몇 가지 문제가 발생했습니다.javamail 가져 오기 pop3 android

POP3에서 특정 메일의 내용을 가져 오려면 javamail이 첨부 파일을 포함한 모든 메일 내용을 다운로드합니다. 첨부 파일이 충분히 크면 안드로이드 프로그램이 예외를 throw합니다. 하지만 IMAP protocal에서 시도해 보았습니다. 콘텐츠의 뼈대를 처음으로 가져오고 일부 큰 첨부 파일이 있어도 제대로 작동합니다.

이메일에 큰 첨부 파일이있을 때 pop3 프로토콜을 사용하여 특정 이메일의 내용을 가져올 수 있습니까?

다음 코드는 imap에서는 잘 작동하지만 pop3에서는 작동하지 않습니다.

public void getContent(Part part) throws Exception { 
    String contentType = part.getContentType(); 
    int nameindex = contentType.indexOf("name"); 
    boolean conname = false; 
    if (nameindex != -1) 
     conname = true; 
    if (part.isMimeType("text/plain") && !conname) { 
     bodytext.append((String) part.getContent()); 
    } else if (part.isMimeType("text/html") && !conname) { 
     String html = (String) part.getContent(); 
     Spanned plainText = Html.fromHtml(html); 
     bodytext.append(plainText); 
    } else if (part.isMimeType("multipart/*")) { 
     Multipart multipart = (Multipart) part.getContent(); 
     int counts = multipart.getCount(); 
     for (int i = 0; i < counts; i++) { 
      BodyPart mpart = multipart.getBodyPart(i); 
      Log.d("type,"," "+ i+mpart.getContentType()); 


      String disposition = mpart.getDisposition(); 
      if ((disposition != null) 
        && ((disposition.equals(Part.ATTACHMENT)) || (disposition 
          .equals(Part.INLINE)))) 
       continue; 
      String contype = mpart.getContentType(); 
      if(contype.toLowerCase().indexOf("application")!=-1||contype.toLowerCase().indexOf("name")!=-1) 
       continue; 


      getContent(multipart.getBodyPart(i)); 
     } 
    } else if (part.isMimeType("message/rfc822")) { 
     getContent((Part) part.getContent()); 
    } 
} 

답변

0

나는 그러나, JavaMail에의 특성을 모르는 :이 부분에서 서버에 떨어져 포착하고 다운로드 할 메시지를 메시지의 MIME 부품을 다운로드 할 수 있도록하기위한 프로토콜의에서

IMAP는 방법을 제공합니다 .

POP3 기본 프로토콜은 전체 메시지 다운로드 만 지원합니다. 선택적 TOP 확장자를 사용하면 첫 번째 n 행의 메시지를 다운로드 할 수 있습니다.

JavaMail이 메모리 용량이 아닌 디스크로 메시지 다운로드를 스트리밍 할 수있는 특정 확장자를 가지고 있다면 메모리 부족 오류를 해결할 수 있어야합니다.

+0

Thx, 나에게 많은 도움이됩니다. :) –

+0

굉장합니다. 상향 투표 및/또는 답변 수령을 고려하십시오. – Max

0

JavaMail 1.4.4 이상은 디스크의 tmp 파일에 POP3 메시지를 캐시하여 메모리를 적게 사용할 수 있습니다. 설정할 속성은 javadocs for the com.sun.mail.pop3 package을 참조하십시오. getContent 대신 getInputStream을 사용하여 큰 첨부 파일을 처리하는 것과 같이 메일 내용을 처리하는 방법에주의해야합니다.