2013-08-24 3 views
2

Gmail에서 보낸 편지함을 가져 오려고합니다. 그러나 그것은 언어에 달려 있습니다. 나는 영어 아래 내 트리 목록을 사용하는 경우 예는 :javamail IMAP을 사용하고 있지만받은 편지함이나받은 편지함을 제외한 다른 폴더를 가져 오는 방법을 모릅니다.

[Gmail]/All Mail 
[Gmail]/Bin 
[Gmail]/Drafts 
.... 

을 내가 다른 언어를 사용하는 경우 그러나, 모든 폴더가이 언어로 번역됩니다. 폴더에 대한 색인을 만들려고했지만 모든 폴더가 알파벳순으로 정렬되기 때문에 성공하지 못했습니다. 다음과 같이 하드 코드 할 수 없습니다 : getFolder("[Gmail]/Sent Mail"), 다른 언어 "보낸 편지가 번역됩니다 .나는 모든 폴더 이름을 얻을 수 있지만 모든 메일을 가져올 수있는"보낸 편지함 "폴더는 어디에서 인식 할 수 있습니까? 보냈다.

답변

4

의 Gmail 폴더 속성을 가지고 있고 (이 표준들 중 하나 인 경우) 원하는 폴더를 얻기 위해 그들에 의존 할 수 있습니다.

을 그래서, 당신이 경우에

store.getDefaultFolder().list("*"); 

당신 첫 번째 레벨뿐만 아니라 모든 폴더를 가져옵니다. 서버의 응답은 다음과 같습니다.

A3 LIST "" "*" 
* LIST (\HasNoChildren) "/" "INBOX" 
* LIST (\Noselect \HasChildren) "/" "[Gmail]" 
* LIST (\HasNoChildren \All) "/" "[Gmail]/All Mail" 
* LIST (\HasNoChildren \Drafts) "/" "[Gmail]/Drafts" 
* LIST (\HasNoChildren \Important) "/" "[Gmail]/Important" 
* LIST (\HasNoChildren \Sent) "/" "[Gmail]/Sent Mail" 
* LIST (\HasNoChildren \Junk) "/" "[Gmail]/Spam" 
* LIST (\HasNoChildren \Flagged) "/" "[Gmail]/Starred" 
* LIST (\HasNoChildren \Trash) "/" "[Gmail]/Trash" 
* LIST (\HasNoChildren) "/" "[Gmail]Trash" 

일단 폴더 목록을 얻으면 원하는 특성을 찾고 반복 할 수 있습니다. 따라서 보낸 폴더를 찾으려면 다음을 수행하십시오.

public Folder getSentFolder(Folder[] folders) throws MessagingException { 
    for (Folder folder : folders) { 
     IMAPFolder imapFolder = (IMAPFolder) folder; 
     for(String attribute : imapFolder.getAttributes()) { 
      if ("\\Sent".equals(attribute)) { 
       return folder; 
      } 
     } 
    } 
    return null; 
} 

그리고 언어에 구속받지 않는 폴더 선택기가 있습니다.

참고 Gmail이 작동하기 때문에 작동합니다. 다른 전자 메일 서버에는 특성이 없을 수 있습니다.