WebEngine (javafx) という名前のコントロールを使用して、javamail によってダウンロードされたメール コンテンツを表示します。コンテンツがプレーン テキストまたは画像 src=http リンクを含む html の場合は問題ありませんが、メールに画像が埋め込まれている (src にコンテンツ ID がある) 場合、コントロールはこの画像を表示しません (もちろん、どこにあるかわからないため)。電子メールを表示するための最適なコントロールは何ですか? メモリに画像を保存するときのやり方。WebEngine でメールをロードするのは良い考えではないかもしれません...
2 に答える
「cid」URL プロトコルを処理し、MIME メッセージの適切な部分からデータを提供するURLStreamHandlerが必要です。URLStreamHandlerFactory を作成し、 URL.setURLStreamHandlerFactory メソッドを呼び出して、 URLStreamHandlerを構成する必要があると思います。私が覚えているように、秘訣は、デフォルトの URLStreamHandlerFactory を取得して、他のすべての URL プロトコルのデフォルト バージョンに委任できるようにする方法がないことです。
または、すべての添付ファイルをディスクに保存し、表示前に html コンテンツを処理して、すべての cid: 参照を file: 参照に変換することもできます。
私の推測では、WebEngine は、受信メールで処理しようとしているメッセージなど、マルチパート MIME でエンコードされたメッセージをデコードおよび表示していません。私の記憶が正しければ、IE のような一部のブラウザーは、マルチパート MIME でエンコードされたメッセージも処理しませんでした (そしておそらくまだ処理していません)。
できることは、Mime4Jなどを使用して自分でマルチパート メッセージをデコードし、マルチパート メッセージから取得したデコードされた MIME タイプに基づいて、デコードされたコンテンツ パーツをコントロール (または必要な外部アプリ) に表示することです。
- WebViewは、text/html、text/plain、image/jpeg などの多数の MIME タイプを表示できるようになります。
- pdfはJPedalFX PDF Viewerで表示できます。
- text/plain はLabelによってレンダリングできます。
- さまざまな image/* MIME タイプをImageViewでレンダリングできます。
- JavaFX コントロールでネイティブにサポートされていない Word ドキュメントやその他の形式をファイルに書き込んで、HostServices.showDocumentまたはDeskTop.openを介して起動することができました。