2011-09-05 3 views
2

Gmail의 모든 폴더에서 이메일을 받고 싶습니다. 받은 편지함, 보낸 편지함 및 기타 폴더에서 전자 메일을 받았습니다. 하지만 임시 보관함, 스팸 및 휴지통에서 그것을 얻을하려고 할 때 예외를 얻을 : 나는 실패 열려고javax.mail을 사용하여 Google의 임시 보관함, 스팸 함 및 휴지통 폴더에서 이메일을 가져올 수 없습니다.

Folder folder = imapSslStore.getFolder(folderName); 
folder.open(Folder.READ_WRITE); 
openedFolders.put(folderName, folder); 

Flags searchFlags = new Flags(Flags.Flag.USER); 
searchFlags.add(FLAG_PREFIX + READ_BY_GAP_FLAG); 
Message[] messages = folder.search(new FlagTerm(searchFlags, false)); 
log.debug("Messages list retrieved: " + messages.length); 
return messages; 

폴더 이름 :

09:51:45,622 ERROR MailRetriever.[main]getNoFlaggedMails:142 - Can't get messages: javax.mail.MessagingException: connection failure 
javax.mail.MessagingException: connection failure 
at com.sun.mail.imap.IMAPStore.getProtocol(IMAPStore.java:742) 
at com.sun.mail.imap.IMAPFolder.open(IMAPFolder.java:910) 
at ua.com.stormlabs.gap.gmail.MailRetriever.getNoFlaggedMails(MailRetriever.java:133) 
at ua.com.stormlabs.gap.gmail.GMailServiceProcessor.processFolder(GMailServiceProcessor.java:95) 
at ua.com.stormlabs.gap.gmail.GMailServiceProcessor.start(GMailServiceProcessor.java:80) 
at ua.com.stormlabs.gap.gmail.GMailGapApp.main(GMailGapApp.java:21) 

이 검색 메일에 대한 코드입니다

[Gmail]/Drafts 
[Gmail]/Spam 
[Gmail]/Trash 

답변

2

가장 간단한 대답은 임시 보관함, 스팸 함 및 휴지통이 폴더가 아니라 Google Mail의 라벨입니다. 내 대답을 확인하기 위해 Google 검색을하고 있습니다.


업데이트는 : 일부 Google 검색 후, 나는 [Gmail]/* 폴더가 아닌 선택 폴더가 없다는 SO Post을 발견했다.

+2

내가 사용하는 imapSslStore.getDefaultFolder()리스트; 모든 폴더를 얻고 난 같은 목록을 얻을 수 있습니다 : INBOX 개인 영수증 여행 일 을 [Gmail] 을 [Gmail]/전체 메일 을 [Gmail]/임시 보관함 을 [Gmail]/중요 을 [Gmail]/보낸 메일 [Gmail]/스팸 [Gmail]/별표 [Gmail]/휴지통 – Hleb

+0

그런 다음'folderName = "Gmail/Drafts"를 실행하고 작동하는지 ('folderName = "/ Drafts"') 확인하십시오. –

+0

아니요, 이제 javax.mail.FolderNotFoundException이 발생합니다. – Hleb

5

내 Gmail 계정에서 휴지통 폴더의 이름이 "[Gmail]/휴지통"이 아닌 "[Google Mail]/Bin"등으로되어 있습니다.

저는 영국에 거주하며 처음 Gmail 계정을 열었을 때 실제로는 [email protected]이 아니고 @ gmail.com이었습니다.

희망이 도움이됩니다.

0
Folder[] f = store.getDefaultFolder().list(); 
for(Folder fd:f){ 
    Folder t[]=fd.list(); 

     System.out.println("-------"+fd.getName()+"------"); 
    for(Folder f1:t) 
     System.out.println("->"+f1.getName()); 

} 
+0

답을 자세히 설명해주십시오. –

0

다음 폴더 이름 :

[Gmail]/Spam 

완벽하게 작동 나를 위해. . 여기 내 코드는 내가 자주 사용하는 JavaMail에 스팸 폴더를 읽는 데 사용할 수 있습니다 : ("*")

private void readFolder(int max, boolean deletes, List<Message> result, Store store, String folderName) throws MessagingException, IOException { 
    Folder folder = null; 
    try { 
     folder = store.getFolder(folderName); 
     folder.open(Folder.READ_WRITE); 
     Message[] messages = folder.getMessages(); 
     for (int i = 0; i < messages.length && result.size() < max; i++) { 
      Message message = messages[i]; 
      if (deletes && (!message.getFlags().contains(Flag.DELETED))) { 
       message.setFlag(Flag.DELETED, true); 
      } 
      result.add(message); 
     } 
    } finally { 
     if (folder != null) { 
      try { 
       folder.close(true); 
      } catch (Exception e) { 
      } 
     } 
    } 
}