3

MimeMessageバイト配列を持つ Tiff イメージの添付ファイルを作成しています。

ByteArrayOutputStream out = new ByteArrayOutputStream();
MimeBodyPart body = new MimeBodyPart();
body.setContent(tiffByteArray, "image/tiff");
body.setDisposition("attachment");
body.setFileName(filename);
MimeMultipart multipart = new MimeMultipart();
multipart.addBodyPart(body);
MimeMessage message = new MimeMessage(Session.getDefaultInstance(System.getProperties()));
message.setContent(multipart);
message.writeTo(out);
String mimeContent = out.toString();

これは正常に機能します。画像はメッセージ内で base64 文字列に変換されます。ただし、ある時点でシステム上の何かが発生し、このコードの一部が を使用し始めますcom.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler。この特定の変換ではjava.awt.Image、バイト配列ではなくオブジェクトが必要です (関連するソース)。次のエラーが表示されます。

画像をストリームにエンコードできません ImageDataContentHandler には Image オブジェクトが必要ですが、タイプ クラス [B] のオブジェクトが指定されました

に を設定でき、javax.activation.DataHandlerにを設定できることがわかりますが、javax.mail.internet.MimeMessage何に設定すればよいかわかりません。DataHandlerjavax.activation.DataContentHandlerFactory

MIME タイプに関係なく、バイト配列を base64 でエンコードされた文字列に強制的に変換する方法はありますか?

4

1 に答える 1

3

javax.mailDataSource明示的に使用できるバイトの実装を提供します。

ByteArrayDataSource dataSource = new ByteArrayDataSource(tiffByteArray, "image/tiff");
DataHandler byteDataHandler = new DataHandler(dataSource);
body.setDataHandler(byteDataHandler);
body.setDisposition("attachment");
body.setFileName(filename);
于 2016-07-26T13:17:57.800 に答える