이 내용은 오른쪽 위에 첨부된 자바메일보내기.zip파일을 토대로 한 것입니다.
다운받아서 압축풀어보시면 자바메일에 대해 자세히 설명해 놓은 PDF파일과 샘플소스가 있습니다.
참고하실분 받아보세요..^^
우선 해야할 것은 자바메일 API와 JAF를 설정하는 것입니다.
1. 자바메일 API 설정하기
다운로드 : http://java.sun.com/products/javamail/ 에 가셔서 다운받으세요
다운로드후 압축을 푸시면 mail.jar이라는 파일이 있는데 이녀석을 톰켓의 common\lib폴더 아래에 복사하여 주십시오.
2. JAF 설정하기
다운로드 : http://java.sun.com/products/javabeans/jaf/downloads/index.html 에 가셔서 다운 받으신 후 압축을 푸시면 activation.jar이라는 파일이 있는데 이녀석을 아까처럼 톰켓의 common\lib폴더 아래에 복사하여 주십시오.
그러면 모든 설정이 종료됩니다.
다음으로 할 일은 메일 보내기 구현입니다..
1. 첨부파일과 함께 보내기
package mailtest;
import java.util.Date;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class MailTransfer {
private String from;
private String to;
private String filename;
public MailTransfer(String from, String to, String filename) {
this.from = from;
this.to = to;
this.filename = filename;
}
public void mailSend(){
if(from == null || to == null || filename == null) {
System.out.println("usage : java <from> <to> <filename>");
System.exit(0);
}
try{
// 시스템 속성 객체 생성
Properties props = System.getProperties();
// POP3 메일 서버 속성 설정
props.put("mail.smtp.host", "127.0.0.1");
// 메일 서버 세션 생성
Session session = Session.getInstance(props, null);
// 메세지 정의
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("안녕하세요. 자바 메일 첨부 파일입니다.");
// 메세지 몸체 생성
BodyPart messageBodyPart = new MimeBodyPart();
// 메세지 텍스트 내용 설정
messageBodyPart.setText("파일 첨부 메일입니다.");
// 다양한 종류의 데이터 추가를 위한 객체 생성
Multipart multipart = new MimeMultipart();
// 첫번째 메세지 몸체 추가
multipart.addBodyPart(messageBodyPart);
// 새로운 몸체 생성
messageBodyPart = new MimeBodyPart();
// 파일 객체 생성
DataSource source = new FileDataSource(filename);
// 메세지 몸체에 파일 객체 첨부
messageBodyPart.setDataHandler(new DataHandler(source));
// 파일 이름 설정
messageBodyPart.setFileName(filename);
// 두번째 메세지 몸체 추가
multipart.addBodyPart(messageBodyPart);
// Multipart 객체를 Message 객체에 추가
message.setContent(multipart);
// 보낸 날짜 설정..ㅡ0ㅡ;; 이거빠지니깐 에러나는데..ㅠㅠ
message.setSentDate(new Date());
// 생성된 메세지 전송
Transport.send(message);
}
catch(javax.mail.MessagingException ex) {
ex.printStackTrace();
}
}
}
2. html로 보내기
package mailtest;
import java.util.Date;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class HtmlTransfer {
private String from;
private String to;
private String filename;
public HtmlTransfer(String from, String to, String filename) {
this.from = from;
this.to = to;
this.filename = filename;
}
public void mailSend(){
if(from == null || to == null || filename == null) {
System.out.println("usage : java <from> <to> <filename>");
System.exit(0);
}
try{
// 시스템 속성 객체 생성
Properties props = System.getProperties();
// POP3 메일 서버 속성 설정
props.put("mail.smtp.host", "127.0.0.1");
// 메일 서버 세션 생성
Session session = Session.getInstance(props, null);
// 메세지 정의
Message message = new MimeMessage(session);
// 메일 헤더 설정
message.setSubject("저의 가족입니다.");
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 메세지 몸체 생성
BodyPart messageBodyPart = new MimeBodyPart();
// HTML 데이터 생성
String htmlText = "<H3>안녕 우리 가족이야<H3>" + "<img src = \"cid:family\">";
// 메세지 데이터 MIME 형식 설정
// 단순히 텍스트로만 발송할경우에는 text/html 대신에 text/plain으로 바꾸시면 됩니다.
messageBodyPart.setContent(htmlText, "text/html; charset=euc-kr");
// 다양한 종류의 데이터 추가를 위한 객체 생성
MimeMultipart multipart = new MimeMultipart("related");
// 메세지 몸체를 Multipart 객체에 추가
multipart.addBodyPart(messageBodyPart);
// 이미지 메세지 몸체 생성
messageBodyPart = new MimeBodyPart();
// 메세지 몸체에 이미지 첨부
DataSource fds = new FileDataSource(filename);
// 메세지 몸체에 파일 객체 첨부
messageBodyPart.setDataHandler(new DataHandler(fds));
// 파일 이름 설정
messageBodyPart.setFileName(filename);
// 메일 헤더 설정
messageBodyPart.setHeader("Content-ID", "family");
// 메세지 몸체를 Multipart 객체에 추가
multipart.addBodyPart(messageBodyPart);
// Multipart 객체를 Message 객체에 추가
message.setContent(multipart);
// 보낸 날짜 설정..ㅡ0ㅡ;; 이거빠지니깐 에러나는데..ㅠㅠ
message.setSentDate(new Date());
// 생성된 메세지 전송
Transport.send(message);
}
catch(javax.mail.MessagingException ex) {
ex.printStackTrace();
}
}
}
3. 참고(메일보내기샘플파일)
이건 위의 파일내용들을 바탕으로 제가 짜본 메일 보내기 입니다.
대충 허접하게 만들어서 정식소스로 쓸려면 좀 수정, 보안이 필요할것 같긴하군요..
메일 작성하는 html 부분이라던지..
흠..파일 받는 멀티파트 부분이라던지...
그냥 이런 흐름으로 짰다는 정도만..참고하고 싶으시면 참고해보세요..
본 목적은 제 참고용이라..흐흐;;;