* 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 |