1

メッセージをフェッチしてその内容を確認するアプリケーションを作成しました。

public void getInhoud(Message msg) throws IOException, Exception {
    Object contt = msg.getContent();
    ...
    if (contt instanceof String) {
          handlePart((Part) msg);
    }
    ...
}

public void handlePart(Part part)
        throws MessagingException, IOException, Exception {

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    String contentType = part.getContentType();
    ...
    if ((contentType.length() >= 9)
            && (contentType.toLowerCase().substring(
            0, 9).equals("text/html"))) {
        part.writeTo(out);
        String stringS = out.toString();
    }
    ...
}

不要なコードを削除しました。この方法は、Gmail、Hotmail、および Outlook デスクトップ クライアントから送信された電子メールには機能しますが、Office 365 Web クライアントから送信された電子メールには何らかの理由で機能しません。他のすべてのクライアントの場合、コンテンツ タイプは「プレーン/テキスト」になりますが、Office 365 メールの場合のみですtext/html。のデータを に書き込み、PartそれByteArrayOutputStreamを に変換しStringます。これは機能します。少なくとも、String パーツのコンテンツが含まれます。しかし、そこに含まれる HTML には多少の欠陥があります。

例を次に示します: http://pastebin.com/5mEYCHxD (Pastebin に投稿された、かなり大きい)。

=ほとんどすべての行の終わりに印刷されている記号に注意してください。これはコード内で修正できるものですか、それともメールクライアントのどこかにあるはずですか?

HTMLのすべての行をループして=、HTMLタグの一部ではないことを確認した後に削除することを考えました。

これは数週間私を悩ませてきました。

ありがとう!

4

1 に答える 1

1

それは引用された印刷可能なエンコーディングのように聞こえます:

quoted-printable エンコード データの行は、76 文字を超えてはなりません。エンコードされたテキストを変更せずにこの要件を満たすために、必要に応じてソフト改行を追加できます。ソフト改行は、エンコードされた行の末尾にある「=」で構成され、デコードされたテキストでは改行として表示されません。

メソッドはwriteToエンコードされたコンテンツも書き込むようです。ストリームを自分でコピーする必要があるようです。このgetInputStreamメソッドは、デコードされた InputStream を返すように記述されています。

于 2012-12-28T10:06:38.707 に答える