3

*メールを読むことができるアプリケーションに取り組んでいます。textview / edittext を使用してメールを表示しています。現在、メールの内容を文字列として取得して表示できます。しかし、HTML コンテンツと画像を含むメールを表示するのに最適なビューはどれですか?? 私を助けてください。ありがとう:)編集済み:SOの友人が提案したようにwebviewを使用しました(@Andro Selva、@CFlexに感謝)。しかし、問題に直面しています。メールの本文が 2 回表示されます。:( 1回はテキスト/プレーンとして、もう1回はテキスト/htmlとして。 空のメールが送信されたときに電子メール メッセージが読み込まれた webview のスクリーンショットです。 次のコードを試してwebviewをロードしようとしました。

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

ここで details[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

4 に答える 4

2

おそらく、同じ電子メールにhtmlとプレーンテキストのコンテンツで構成できるすべての電子メールコンテンツを表示しています。これは、この種の電子メールがマルチパートコンテンツであり、分割する必要があるために発生します。また、添付ファイルと画像(埋め込み)を分離して、「詳細」がマルチパートコンテンツ本文を返さないかどうかを確認する必要があります。

于 2012-07-24T13:09:56.210 に答える
2

HTMLをフォーマットして画像を表示WebViewできるので、を実装する必要があると思います。

AFAIK、htmlを含むtextViewはコンテンツをフォーマットできますが、画像を表示することはできません。

編集:以下が機能するはずです:

webViewBody.loadData(details[3], "text/html", null);
于 2012-07-23T11:46:47.557 に答える
2

2 回書き込んだため、詳細が 2 回表示されます。

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

考えられる解決策: または のいずれloadData()かを使用しますloadDataWithBaseURL()

于 2012-07-25T05:06:20.300 に答える
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);

これを解決するのを手伝ってくれたみんなに感謝します。:)

于 2012-07-25T10:09:06.360 に答える