2012-07-23 2 views
3

* 전자 메일을 읽을 수있는 응용 프로그램을 작성 중입니다. 나는 textview/edittext를 사용하여 메일을 표시하고 있습니다. 지금 나는 전자 메일 내용을 문자열로 가져 와서 표시 할 수 있습니다. 하지만 html 콘텐츠와 이미지가 포함 된 이메일을 표시하는 데 가장 좋은 방법은 무엇입니까 ?? 도와주세요. 고마워요 :) 편집 : 나는 S.O.의 제안대로 webview를 사용했습니다. 친구들 (감사합니다 @ Andro Selva, @CFlex). 하지만 문제가 발생했습니다. 전자 메일의 본문을 두 번 표시합니다. :( 일단 텍스트/일반 다시 텍스트/HTML로. its a screeshot of webview loaded with email message when a blank mail is sent 내가 웹보기를로드하는 코드를 다음과 같은 노력했다.으로안드로이드에 이미지 및 HTML 콘텐츠를 표시하는 데 가장 좋은 방법

여기
webViewBody.loadData(details[3], "text/html", "UTF-8"); 
//webViewBody.loadDataWithBaseURL(null, details[3] , "text/html", "utf-8", null); 

[3] 이메일 내용입니다. 내가 무엇을 생각 자세한 사항 여기에 실종!? :(저를 도와주세요

편집 :.. 나는 아래의 이메일 내용을 표시하기위한 메시지 내용을 얻기 위해 사용했다 내가 추가 한 코드를

public void getContent(Message msg) 
{ 
    try 
    { 
     Object o = msg.getContent(); 
      if (o instanceof String) 
     { 
     if(((String) o).equalsIgnoreCase("")) 
     { 
     } 
        else 
     { 
      messageBody = (String)o+"STRING!!"; 
     } 
     } 
     else if (o instanceof Multipart) 
     { 
     Multipart mp = (Multipart)o; 
      int count3 = mp.getCount(); 
     for (int j = 0; j < count3-1; j++) 
     { 
      // Part are numbered starting at 0 
      BodyPart b = mp.getBodyPart(j); 
      Object o2 = b.getContent(); 
      if (o2 instanceof String) 
      { 
       if(((String) o).equalsIgnoreCase("")) 
       { 
       } 
            else 
       { 
        messageBody = (String)o2+"MULTIPART!!"; 
       } 
      } 
     } //End of for 
     } 
     else if (o instanceof InputStream) 
     { 
     //System.out.println("**This is an InputStream message**"); 
     InputStream is = (InputStream)o; 
     // Assumes character content (not binary images) 
        //messageBody = convertStreamToString(is)+"INPUT STREAM!!"; 
      int c; 
        while ((c = is.read()) != -1) 
        { 
        messageBody = convertToString(is)+"INPUT STREAM!!"; 
       System.out.println(messageBody); 
        } 
     } 
    } 
     catch (Exception ex) 
    { 
    System.out.println("Exception arise at get Content"); 
    ex.printStackTrace(); 
    } 

    //TODO TEST CODES 
    try 
    { 
     String contentType = msg.getContentType(); 
     //   System.out.println("Content Type : " + contentType); 
     Multipart mp = (Multipart) msg.getContent(); 
     int count = mp.getCount(); 
     for (int i = 0; i < count; i++) 
     { 
      dumpPart(mp.getBodyPart(i)); 
     } 
    } 
    catch (Exception ex) 
    { 
     System.out.println("Exception arise at get Content"); 
     ex.printStackTrace(); 
    } 
} 

public String convertToString(InputStream inputStream) 
{ 
    StringBuffer string = new StringBuffer(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
    String line; 
    try 
    { 
     while ((line = reader.readLine()) != null) 
     { 
      string.append(line + "\n"); 
     } 
    } 
    catch (IOException e) 
    { 
    } 
    return string.toString(); 
} 

컨트롤은 항상 "else if (o instanceof InputStream)"조건으로 이동합니다. 그래서 그것의 스트리밍 이메일은 항상 완전한 전자 메일 컨텐츠를 표시합니다. 내가 여기서 무엇을 놓치고 있니?

+4

어쩌면 webview? 동일한 효과가 있지만 다른보기보다 html을 더 효과적으로 관리 할 수 ​​있습니다. –

+0

답장을 보내 주셔서 감사합니다. 여기에서 다시 시도해 보겠습니다. – Aadi

+0

내 주요 질문을 업데이트했습니다. 확인하고 도와주세요. – Aadi

답변

1

이 줄을 추가하면 문제가 해결됩니다!

MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
    CommandMap.setDefaultCommandMap(mc); 

이 문제를 해결하는 데 도움을 주신 모든 분들께 감사드립니다. :)

+0

다음에 어떤 내용을 표시 할 것인지 선택하십시오. –

+1

이 줄을 추가하면, 컨트롤은 해당 if 루프로 이동합니다. 내가 게시 한 코드를 확인하십시오. 인스턴스가 string 유형 인 경우 쉽게 처리 할 수 ​​있습니다. – Aadi

2

표시 이미지를 포맷 할 수 있기 때문에 WebView을 구현해야한다고 생각합니다.

AFAIK, HTML이있는 textView는 내용의 서식을 지정할 수는 있지만 이미지를 표시 할 수는 없습니다.

편집 : 는 다음과 같은 작업을해야합니다 :

webViewBody.loadData(details[3], "text/html", null); 
+0

답장을 보내 주셔서 감사합니다 :) 나는 그것을 밖으로 시도하고 다시 여기. – Aadi

+0

안녕하세요, 그 몇 가지 메일을 제대로 표시하지만 이미지 및 HTML 콘텐츠가있는 대부분의 메일에 대해서는 페이지를로드 할 수 없다는 메시지가 표시됩니다. ( – Aadi

+0

logcat 게시 – AMerle

2

은 아마 당신은 HTML과 같은 이메일에 일반 텍스트 내용으로 구성 할 수있는 모든 이메일의 내용을 표시합니다. 이메일의 종류가 멀티 파트 콘텐츠이고 분리해야하는 경우 첨부 파일과 이미지 (임베디드)를 분리해야합니다. "세부 정보"가 멀티 파트 콘텐츠 본문을 반환하지 않는지 확인하십시오.

+0

답장을 보내 주셔서 감사합니다. 내가 옳은 것 같아요. 나눌 수 없습니다. 사용했던 코드로 제 질문을 업데이트 해 드리겠습니다. – Aadi

+0

안녕하세요, 제 질문을 업데이트했습니다. 모양. 컨트롤은 항상 "else if (o instanceof InputStream)" 상태이므로 스트리밍 전자 메일이 항상 전자 메일 내용을 표시하므로 여기에 무엇이 누락되어 있습니까? – Aadi

+0

죄송합니다. @AdarshHs, 아직 배우는 중입니다. Android, 전자 메일 형식의 알려진 내용으로 이야기합니다. 전자 메일 콘텐츠의 일부를 게시 할 수 있습니까? "RAW"포맷을 받게됩니까? –

2

는 세부가 두 번 다만 때문에 당신이 쓴 두 번으로 표시됩니다 :

webViewBody.loadData(details[3], "text/html", "UTF-8"); 
webViewBody.loadDataWithBaseURL(null, details[3] , "text/html", "utf-8", null); 

가능성있는 해결책 : loadData() 또는 loadDataWithBaseURL() 중 하나를.

+0

답장을 보내 주셔서 감사합니다. 죄송합니다. 나는 한 번에 그 중 하나만 사용했으나 둘 다 똑같은 결과를 보았습니다. ( – Aadi

+0

혼란을 피하기 위해 그 줄을 주석으로 달아 둡니다. – Aadi

관련 문제