Я разрабатываю приложение для Android, которое в основном является почтовым клиентом. Я могу подключиться к удаленному серверу и получать сообщения электронной почты отлично, но когда я пытаюсь загрузить вложение это просто вторит следующее:JavaMail Ошибка содержимого при загрузке вложений из электронной почты
java.io.IOException: No content at com.sun.mail.imap.IMAPInputStream.fill(IMAPInputStream.java:159)
Прикрепленный AUDIO/AMR
и вывод говорит содержание
com.sun.mail.util.BASE64DecoderStream[email protected]
Если кто-то задается вопросом, я пытаюсь загрузить VoiceMail с сервера IMAP Vodafone. Если вы хотите протестировать его самостоятельно, настройки будут следующими: имя пользователя: [email protected]
, где вы подставляете x для своего номера, пароль - ваш 4-значный PIN-код голосовой почты, хост vvm.vodafone.com.au
и port is 993
.
Вот некоторые из кода я в настоящее время:
public void GetVoicemail() throws Exception {
Session session = Session.getInstance(SetProperties(), null);
Store store = session.getStore();
store.connect(_host, 993, _user, _pass);
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
System.out.println("Emails: " + inbox.getMessageCount());
Message msg = inbox.getMessage(1);
Address[] froms = msg.getFrom();
String email = froms == null ? null : ((InternetAddress) froms[0]).getAddress();
File test = new File(Environment.getExternalStorageDirectory() + "/test.amr");
Multipart multiPart = (Multipart) msg.getContent();
for (int i = 0; i < multiPart.getCount(); i++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
System.out.println("Part: " + part.getContentType());
if (part.getContentType().equalsIgnoreCase("AUDIO/AMR")) {
System.out.println(part.getContent());
System.out.println(part.getEncoding());
BufferedReader in = new BufferedReader(new InputStreamReader(part.getInputStream()));
String inputLine;
while ((inputLine = in .readLine()) != null)
System.out.println(inputLine); in .close();
}
}
//Msg temp = new Msg(GetBuffer(msg.getContent()), email, msg.getSentDate());
//Main.messages.add(temp);
/*
Multipart multipart = (Multipart) msg.getContent();
for(int i = 0; i < multipart.getCount(); i++){
BodyPart bodyPart = multipart.getBodyPart(i);
InputStream is = bodyPart.getInputStream();
File f = new File(Environment.getExternalStorageDirectory() + "/test.amr");
FileOutputStream fos = new FileOutputStream(f);
byte[] buf = new byte[4096];
int bytesRead;
while((bytesRead = is.read(buf))!=-1) {
fos.write(buf, 0, bytesRead);
}
fos.close();
}
*/
}
Привет, вот вывод, который странно содержит Base64 String, который я смог преобразовать в онлайн в двоичный файл, и он был воспроизводим! –
Это было слишком долго для публикации здесь, поэтому я загрузил его здесь http://pastebin.com/G9zWZY9M –
Во-первых, вы используете старую версию JavaMail, поэтому вывод отладки включает в себя ваш (закодированный, но не зашифрованный) пароль в ответ AUTHENTICATE PLAIN. Немедленно измените свой пароль. –