1

我使用 javamail 来获取消息,当我收到消息时:com.sun.mail.util.BASE64DecoderStream,

我知道这是多部分消息的一部分,在我拥有的消息来源中

Content-Type: image/png; name=index_01.png

内容传输编码:base64

如何编码此消息?

编辑:我有那个代码:

else if (mbp.getContent() instanceof BASE64DecoderStream){
                        InputStream is = null;
                        ByteArrayOutputStream os = null;

                            is = mbp.getInputStream();
                            os = new ByteArrayOutputStream(512);
                            int c = 0;
                            while ((c = is.read()) != -1) {
                                os.write(c);
                            }



                            System.out.println(os.toString()); 

                    }

并且该代码返回奇怪的字符串,例如:Ř˙á?Exif??II*????????????˙ě?Ducky???????˙á)

4

3 回答 3

2

com.sun.mail.util.BASE64DecoderStream是平台相关的。您不能总是依赖于处理 base64 解码的类类型。

相反,javamail API 已经为您支持解码:

// part is instanceof javax.mail.Part
ByteArrayOutputStream bos = new ByteArrayOutputStream();
part.getDataHandler().writeTo(bos);

String decodedContent = bos.toString()
于 2014-08-12T06:26:32.780 回答
0

当您阅读图像部分的内容时,您期待什么?图像以编码格式存储在消息中,但 JavaMail 在将字节返回给您之前对数据进行解码。如果将字节存储在文件中,则可以使用许多图像查看/编辑应用程序显示图像。如果您想用您的Java 程序显示它们,您需要使用(例如)java.awt.image 包中的API 将字节转换为适当的Java Image 对象。

于 2013-01-15T18:31:36.527 回答
0

Sun 的 base 64 编码器位于可选包中,可以随时移动或重命名而不会发出警告,也可能在替代 Java 运行时中丢失,也可能禁用对这些包的访问。最好不要依赖它。

我想说,改用Apache Commons的Base64,应该做同样的事情。希望您可以重建和修复源代码。

于 2013-01-15T11:49:59.377 回答