2012-05-17 2 views
1

Я пытаюсь копировать сообщения из папки Входящие:Копирование массива Сообщение

messages = folder.getMessages(); 
Message[] source = messages; 

Я делаю это, потому что, когда я просматривать сообщения в почтовом ящике, все последние сообщения становятся «видны сообщения». Причиной этого является метод getContent (). Я хочу выяснить, как копировать сообщения в другой массив и обрабатывать их все в массиве исходных сообщений.

Но когда я пытаюсь выполнить процесс копирования, как указано выше, любые изменения, которые я делаю в исходном массиве, также изменяются в массиве сообщений. Я имею в виду, если я вызываю getContent() в массив сообщений источника, также создается массив сообщений.

Как скопировать все сообщения и полностью их разложить из папки?

Любая помощь будет оценена по достоинству.

public Message[] ConnectionToServer(String email, String password) 
      throws Exception 
     { 
     Properties props = System.getProperties(); 
     props.setProperty("mail.imaps.partialfetch", "false"); 
     URLName server = new URLName("imaps://" + email + ":" + password + "@imap.gmail.com/INBOX"); 
     Session session = Session.getDefaultInstance(props, null); 
     folder = session.getFolder(server); 

     if (folder == null) 
     { 
      System.exit(0); 
     } 
     folder.open(Folder.READ_WRITE);  
     messages = folder.getMessages(); 

     for (int i = messages.length - 1; i >= 23; i--) 
     { 
      Part p = messages[i]; 

      subject = messages[i].getSubject(); 

      if (messages[i].isSet(Flags.Flag.RECENT)) { 
      isSet = true; 
      System.out.println("Recent"); 
      isSetlist.add(String.valueOf(isSet)); 
     } 
     if (messages[i].isSet(Flags.Flag.SEEN)) 
     { 
      isSet = false; 
      System.out.println("Read"); 
      isSetlist.add(String.valueOf(isSet)); 
     } 
     else 
     { 
      isSet = true; 
      System.out.println("Recent"); 
      isSetlist.add(String.valueOf(isSet)); 
     } 

      body = getText(p); 

      list.add(body); 
     } 
     return (Message[]) messages; 
    } 

и метод getContent в моем методе GetText():

public String getText(Part p) throws MessagingException, IOException { 

     if (p.isMimeType("text/*")) { 
      boolean textIsHtml = false; 
      String s = (String) p.getContent(); 

      textIsHtml = p.isMimeType("text/html"); 
      return String.valueOf(s); 
     } 

     if (p.isMimeType("multipart/alternative")) { 
      // prefer html text over plain text 
      Multipart mp = (Multipart) p.getContent(); 
      String text = null; 
      for (int i = 0; i < mp.getCount(); i++) { 
       Part bp = mp.getBodyPart(i); 
       if (bp.isMimeType("text/plain")) { 
        if (text == null) 
         text = getText(bp); 
        continue; 
       } else if (bp.isMimeType("text/html")) { 
        String s = getText(bp); 
        if (s != null) 
         return String.valueOf(s); 
       } else { 
        return getText(bp); 
       } 
      } 
      return text; 
     } else if (p.isMimeType("multipart/*")) { 
      Multipart mp = (Multipart) p.getContent(); 
      for (int i = 0; i < mp.getCount(); i++) { 
       String s = getText(mp.getBodyPart(i)); 
       if (s != null) 
        return String.valueOf(s); 
      } 
     } 

     return null; 
    } 

ответ

0

Вы скопировав указатель на массив, вы не копируете содержание сообщения. Вы находитесь в двух направлениях от того, что хотите.

Но копирование содержимого сообщения не решит вашу проблему. Процесс копирования содержимого сообщения будет устанавливать флаг SEEN. Вам нужно сделать копию всех флажков SEEN перед тем, как вы получите доступ к содержимому сообщения.

Или вы можете использовать com.sun.mail.imap.IMAPMessage.setPeek() method, чтобы вызвать доступ к содержимому сообщения, чтобы НЕ установить флаг SEEN. Включите объект Message в IMAPMessage, чтобы использовать этот метод.

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