Я отображаю индикатор выполнения для загрузки вложений, и он работает нормально ... но когда я загружаю некоторые вложения, я получаю сообщение об исключении:
Исключение в теме "main" com.sun.mail.util.DecodingException: BASE64Decoder: Ошибка в закодированном потоке: необходимо 4 действительных символа base64, но только до 1 получилось EOF, 10 самых последних символов были: «Q3w5ilxj2P»
Я нашел объяснение:
Некоторые серверы IMAP не реализуют функцию IMAP Partial FETCH должным образом.Эта проблема обычно проявляется в поврежденных вложениях электронной почты при загрузке больших сообщений с сервера IMAP.Чтобы обойти эту ошибку сервера, установите для свойства mail.imap.partialfetch значение false.Вам нужно будет установить это свойство в объекте 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>");
это решило проблему…. Однако метод getInputStream () из класса Part блокирует поток до тех пор, пока вложение не будет полностью загружено, и невозможно получить информацию о количестве байтов, которые уже были загружены из почтового ящика.Без этой информации невозможно отобразить индикатор выполнения.Так есть ли способ получить эту информацию и отобразить индикатор выполнения?