Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


Java WebMail System Implementation(4)
 
첨부파일의 메일보내기 및 POP3서버의 폴더내용을 이용하여 데이터를 가져오도록 하는 샘플을 설명과 함께 보도록 하자. ( 2003/05/13 ) 685
Written by ienvyou - 최지웅
3 of 4
 
Get Attatchment 


####################################################
# Java Mail API 1.2를 이용한 웹메일 시스템의 구현.  #
####################################################

첨부된 내용 가져오기

메시지와 함께 첨부되어 있는 내용들을 가져오는 것은 보낼때처럼 일반적인 MIME의 

개념으로 생각해서는 안된다. 메시지의 내용부분이 첨부된 내용들을 가지고 있을때 

Multipart 객체를 사용해야 하는데 이 때 각각에 대하여 메시지의 내용과 첨부(attachement)에 

대한 서로 다른 프로세스를 정의해줘야 한다.

만약 어떤 첨부된 내용이 있다면 각각의 Part들은  part.getDispostion()메소드로부터 

Part.ATTACHMENT의 속성을 가지고 있어야 한다. 어쨌든 첨부되는 내용은 또한 

non-text MIME형태일수도 있고, Part.INLINE형태일수도 있다.

결국 INLINE형태나 ATTACHMENT를 Part가 가지고 있다면 getFileName()과 getInputStream()을 

이용하여 파일의 내용을 빼내어야 할것이다

아래쪽의 코드를 한번 보도록 하자.

Content의 내용을 Multipart로 가져온 후 여러개의 part가 메시지의 content에 포함되어져 있다면 

각각의 bodyPart들 part인터페이스의 형태로 담도록 한다.

그리고 각각의 part에 대하여 getDisposition()메소드를 호출하여, ATTACHMENT속성이나 

INLINE속성을 가지고 있다면 파일의 내용을 빼낼수 있도록 코딩하면 된다.


Multipart mp = (Multipart)message.getContent();

for (int i=0, n=multipart.getCount(); i < n; i++) {
  Part part = multipart.getBodyPart(i));

  String disposition = part.getDisposition();

  if ((disposition != null) && 
      ((disposition.equals(Part.ATTACHMENT) || 
       (disposition.equals(Part.INLINE))) {
    saveFile(part.getFileName(), part.getInputStream());
  }
}

saveFile()메소드는 파일이름과 스트림으로부터 byte들을 읽는 코드를 넣으면 된다.

만약 해당 파일이 이미 존재한다면 파일이름의 끝에 숫자를 붙여서 변환시키게 된다.

//  saveFile()코드
File file = new File(filename);
for (int i=0; file.exists(); i++) {
  file = new File(filename+i);
}


위의 코드같은 경우는 단순히 message part들의 플래그 값이 타당했을 경우만 사용되어 질수 있는데, 

모든 경우를 따진다면 아래의 코드처럼 disposition이 null일 경우와 handle에 따라서 part의 

MIME타입을 얻어야 한다.

if (disposition == null) {
  // Check if plain
  MimeBodyPart mbp = (MimeBodyPart)part;
  if (mbp.isMimeType("text/plain")) {
    // Handle plain
  } else {
    // Special non-attachment cases here of image/gif, text/html, ...
  }
...
}

 
1 2 3 4
References
 
아티클소스 : javaMail2.zip
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD