1

データベース内のエンティティの入力に使用されるアドレスにユーザーが電子メールを送信できるようにする必要があります。私のプログラムは定期的に受信トレイで新着メールをチェックし、新着メールアイテムが見つかったら、件名、送信日、送信日、添付ファイル、本文を使用してDBエンティティにデータを入力する必要があります。すべてのフィールドを取得できましたが、HTMLが含まれていると本文に問題が発生します。メールのテキストを保存するだけです。本体からすべてのタグや署名などを削除したいと思います。正規表現以外にこれを行うためのより良い方法はありますか?

これが私が本文を取得するために使用している関数です。私の問題は、mimetypeが関数の最後の部分で「multipart/*」の場合にヒットしたときに発生します。この関数はhtmlメッセージを返します。正規表現以外のそのセクションのタグを削除するにはどうすればよいですか?

    /**
 * Return the primary text content of the message.
 */
private String getText(Part p) throws MessagingException, IOException {
    if (p.isMimeType("text/*")) {
        String s = (String)p.getContent();
        textIsHtml = p.isMimeType("text/html");
        return s;
    }

    if (p.isMimeType("multipart/alternative")) {
        // prefer html text over plain text
        Multipart mp = (Multipart)p.getContent();
        String text = null;
        for (int i = 0; i < mp.getCount(); i++) {
            Part bp = mp.getBodyPart(i);
            if (bp.isMimeType("text/plain")) {
                if (text == null){
                    text = getText(bp);
                }
                continue;
            } 
            else if (bp.isMimeType("text/html")) {
                String s = getText(bp);
                if (s != null){
                    return s;
                }
            } 
            else {
                return getText(bp);
            }
        }
        return text;
    } 
    else if (p.isMimeType("multipart/*")) {
        Multipart mp = (Multipart)p.getContent();
        for (int i = 0; i < mp.getCount(); i++) {
            String s = getText(mp.getBodyPart(i));
            if (s != null)
                return s;
        }
    }
    return null;
}

ありとあらゆる助けをいただければ幸いです。

私は次のことを試みてきましたが、それは私が以下にコメントしたスペイン語の問題を引き起こしています。

 else if (p.isMimeType("multipart/*")) {
        Multipart mp = (Multipart)p.getContent();
        for (int i = 0; i < mp.getCount(); i++) {
            String s = getText(mp.getBodyPart(i));
            Document doc = Jsoup.parse(s);
            String retText = doc.text();
            retText.replaceAll("[0%d0%a]", "<br />");
            if (retText != null)
                return retText;
        }
    }

また、正規表現として[\ r\n]と[\n]を試しました。

4

1 に答える 1

4

jsoupなどのHTMLパーサーを使用して、HTMLコードをトラバースし、必要なテキストだけを抽出できます。

見てください:

于 2012-08-24T13:11:53.973 に答える