2014-12-10 6 views
0

Я разрабатываю приложение для 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(); 
     } 
     */ 
} 

ответ

0

Скорее всего, почтовый сервер не работает.

Можете ли вы разместить JavaMail debug output при попытке получить доступ к приложению?

Возможно, вам придется использовать this technique для работы с поврежденным сервером.

+0

Привет, вот вывод, который странно содержит Base64 String, который я смог преобразовать в онлайн в двоичный файл, и он был воспроизводим! –

+0

Это было слишком долго для публикации здесь, поэтому я загрузил его здесь http://pastebin.com/G9zWZY9M –

+0

Во-первых, вы используете старую версию JavaMail, поэтому вывод отладки включает в себя ваш (закодированный, но не зашифрованный) пароль в ответ AUTHENTICATE PLAIN. Немедленно измените свой пароль. –

Смежные вопросы