달력

122024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31


테스트 성공.

* Blocking 문제
java 프로세스 실행 시, I/O 가 끝날 때까지 thread 가 run 상태이다. blocking 이 문제가 된다면 thread 를 따로 생성해서 사용하자.
만약 web 에서 구현 시 servlet 을 사용한다면, 문제가 되겠지. application 을 스케쥴걸어서 동작시키는 것이 좋겠다.
http://okjsp.pe.kr/bbs?act=VIEW&seq=46721&bbs=bbs3&keyfield=content&keyword=pop3&pg=
K사에서 구현 시, 스케쥴러 돌려달라고 요청했음.

http://okjsp.pe.kr/bbs?act=VIEW&bbs=bbs3&keyfield=content&keyword=pop3&seq=23441&pg=2


JavaMail을 찾다가 본 소스 입니다. 실제 실행되는지는 잘 모르겠고요.
한번 해보시기 바랍니다.

일단 메일함에 접근을 하기 위해서는 session과 store, folder라는 세가지가 필요합니다.
그러기 위해선 다음과 같이 import해야 합니다.

import javax.mail.*;
import javax.mail.internet.*;
import javax.actication.*;

private Session sess;
private Store store;
private Folder folder;

그리고 나선 smtp 서버와 pop3 서버에 연결을 해야 겠지요 다음과 같습니다.

Properties prop = System.getProperties();
prop.put("mail.smtp.host",smtp 서버);
sess = Session.getInstance(prop, null); // 세션 smtp 시작

store = sess.getStore("pop3");
store.connect(pop3서버, user, pwd); // pop3 에 스토어로 연결됨

folder = store.getFolder("INBOX"); // store를 통해 편지함에 접근합니다.
folder.open(Folder.READ_ONLY); // Inbox 받은편지함을 엽니다.

이렇게 하면 이제 편지들을 가져 올준비가 됐습니다.
folder.open 메소드에 쓰인 상수는 Javamail API에서 찾아보시기 바랍니다.

가져오는 간단한 예제를 보지여.
Message[] messages = folder.getMessages(); // Message 는 편지를 의미합니다.

//내용을 뽑아내는 부분은 반복문으로 뽑아내시는게 좋을겁니다. for문을 쓰면
for (int i=0;i<messages.length;i++) 이하는 대충 넘어가고

보낸 날짜 받기.. 는 String date = messages[i].getSentDate() // 날짜 포맷에 맞춰 바꾸세요.
사이즈 뽑아내기는 String size = messages[i].getSize() // 사이즈도 포맷에 맞춰 바꾸세요.
보낸 사람 주소 Address addr = messages[i].getFrom()[0];
제목  String subject[] = messges[i].getHeader("subject");
      subject[0] 이 제목입니다.

모든 데이터는 한글 변환 처리 해주셔야 할겁니다.
그리고 연결을 끝낼때는 folder와 store를 닫아 주셔야 합니다.

그리고 위에 코드들을 쓰는 method는 모두 MessageException 처리를 해주셔야 합니다.
꼭 성공하세요.. 저도 소스는 구했지만 테스트를 해볼곳이 없어서 아직 못해봤습니다.


* 메일 내용 받기

Part p = body.getBodyPart(0);
 
 if(p.isMimeType("text/*")){
  Object content = p.getContent();             <------- 요기
        if (content instanceof String) {
          mail.contents = (String) content;
        } else if (content instanceof InputStream) {
          InputStream in = (InputStream) content;
          ByteArrayOutputStream bout = new ByteArrayOutputStream();
          byte[] buffer = new byte[8192];
          int amount = 0;
          while ((amount = in.read(buffer)) >= 0) {
            bout.write(buffer, 0, amount);
          }
          mail.contents = new String(bout.toString());
        }
 }



* 특정 경로의 첨부파일 가져오기


try{ 
    Properties props = new Properties(); 
    Session session = Session.getDefaultInstance(props, null); 
    Store store = session.getStore("pop3"); 
    store.connect(host, user, password); 

    Folder folder = store.getFolder("INBOX"); 
    folder.open(Folder.READ_ONLY); 

    Message message[] = folder.getMessages();
    for (int i=0, n=message.length; i<n; i++) { 
        if(message[i].isMimeType("text/plain")){
            System.out.println("일반텍스트메일입니다.");
        }else if(message[i].isMimeType("multipart/*")) {   // 첨부파일일때
            System.out.println("첨부메일입니다.");
            filename =  part.getFileName(); 
            if(filename != null){ 
                InputStream in = part.getInputStream(); 
                FileOutputStream fout = new FileOutputStream(new File(filename)); 
                while(c!=-1){ 
                    fout.write(c); 
                    c=in.read(); 
                } 
                fout.close(); 
                in.close(); 
            }
        }
    }
    folder.close(true); 
    store.close(); 
}catch(Exception e){ 
    System.out.print(e); 
}


'java' 카테고리의 다른 글

Jakarta POI - 읽기  (0) 2005.11.30
스케쥴러 구현  (0) 2005.11.30
정규식  (0) 2005.11.30
DB를 이용한 채번  (0) 2005.11.28
파일 업로드와 MultipartRequest  (0) 2005.11.28
Posted by 알 수 없는 사용자
|