【发布时间】:2012-02-23 14:16:18
【问题描述】:
我显示下载附件的进度条,它工作正常……但是当我下载一些附件时,我收到异常消息:
线程“主”com.sun.mail.util.DecodingException 中的异常: BASE64Decoder:编码流中的错误:需要 4 个有效的 base64 字符,但在 EOF 之前只有 1 个,最近的 10 个字符 分别是:“Q3w5ilxj2P”
我找到了解释:
某些 IMAP 服务器未实现 IMAP 部分 FETCH 功能正常。此问题通常表现为损坏 从 IMAP 下载大邮件时的电子邮件附件 服务器。要解决此服务器错误,请将 “mail.imap.partialfetch”属性为假。你必须设置这个 您提供给 Session 的 Properties 对象中的属性。
http://java.sun.com/products/javamail/NOTES113.txt
所以我关闭了部分提取:
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.partialfetch", "false");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "<username>","<password>");
这解决了问题……但是 Part 类的 getInputStream() 方法会阻塞线程,直到附件完全下载,并且无法获取有关已从邮箱下载的字节数的信息。 如果没有这些信息,就不可能显示进度条。那么有没有办法获取这些信息并显示进度条呢?
【问题讨论】:
标签: java progress-bar imap jakarta-mail