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(2)
 
아시는 분은 알겠지만 2001년에 모모 사이트에 돈(무려 900원)받고 올라간 내용인데 요청에 의하여 자바패턴사이트에 다시 공개합니다. ( 2003/04/25 ) 716
Written by ienvyou - 최지웅
2 of 4
 


Session/Message/Address Class

* Session Class

세션클래스는 자바메일 기본에 정의된 클래스이다. 이 세션을 통해서 많은 일을 할수 있는데,

해당 객체는 메일서버, 사용자 정보, 패스워드 등의 정보를 java.util.Properties클래스에 의해 

얻어올 수가 있다. 

Properties클래스의 내용과 사용법은 자바기본의 Property사용법에 대하여 참조하라.

클래스의 생성자는 private형태로 되어있으며(즉 singlton pattern이란 이야기겠죠?) 하나의 기본세션을 

getDefaultInstance()메소드에 의하여 공유할수 있게된다.

세션을 얻어내는 예를 들어보면 

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

 처럼 사용할수도 있으며, 하나의 유일한 세션을 생성한다면 getInstance()메소드를 
 
 사용할수도 있을것이다.

Properties props = new Properties();
// fill props with any information
Session session = Session.getInstance(props, null);

getInstance(prop, null)에서 두번째 parameter인 null은 javax.mail.Authenticator 클래스를 지칭하는데 

null값을 사용한다면 인증을 사용하지 않겠다는 이야기로 보면 된다. 

Authenticator는 나중에 알아보도록 하자.


*Message Class

세션이 생성되었다면 이제 메일을 보내기 위해 메시지를 생성할 시점이 된것이다.

Message클래스의 형태를 살펴보면, 전편에서도 이야기 했듯이 abstact class로 되어 있으며, 

대부분의 경우 javax.mail.internet.MimeMessage를 subclassing하여 사용한다.

MimeMessage는 서로 다른 RFC프로토콜 상에서 정의되는 MIME타입과 header를 인식할수 있는 

email message를 가르킨다.

메시지의 헤더정보는 반드시 US-ASCII코드로 제한되어 있으므로 non-ASCII(한글표현의 경우)의 

경우에는 헤더필드에 포함되어 있는 내용을 encode하여야 메시지를 제대로 볼수 있다.

Message를 생성할때는 MimeMessage의 생성자에 session객체가 argument로 들어가게 된다.

MimeMessage message = new MimeMessage(session);

위의 것 이외의 다른 생성자에는 RFC-822 형태로 된 input stream으로부터 

MimeMessage를 생성할 수도 있다.

이제 순서에 따라 메시지를 생성하게 되면, 해당 객체를 이용하여 메시지 각각의 부분을 세팅할수 

있는 준비가 다 된것이다. 했던 얘기 계속 또 나오는 것이지만 Message는 Part를 구현한 클래스이고,

MimeMessage는 MimePart를 구현한 클래스라고 설명했다.

기본적인 방법은 content를 위한 argument와 mime type을 setContent()메소드를 아래처럼 사용하여 

세팅시키는 일이다.

message.setContent("Hello", "text/plain");

위의 형태처럼 content를 조합할수도 있겠지만 setText()메소드를 사용해도 무방하다. 

왜냐하면 Message에서 기본 MIMIE type은 text/plain을 따르고 있기 때문이다.

사용법을 보자.

message.setText("Hello"); // equals ->message.setContent("Hello", "text/plain");

content를 세팅시킨후에는 제목을 넣어야 할것인데 그것은 아래의 메소드를 사용하여 만들수 있다.

message.setSubject("First");

!!!!!!!!!!!!!!!!!!자 이제 제목까지 넣었으면 다음에 무엇을 해야 할까??

누구에게 메일을 보낼것인가~~!

메일 받는 사람을 세팅시켜야 할것이다.


*Address Class

위의 순서에 따라 세팅이 되어 있을것이다.

Session의 생성 --> Message의 생성

Message클래스처럼 Address클래스도 abstract클래스이다. 여러분이 메일을 보내기 위해서는

javax.mail.internet.InternetAddress class를 사용해야 한다.

주소를 생성하기 위해 해당 InternetAddress클래스에 email address만 argument로 세팅해도 된다.

Address address = new InternetAddress("president@chungwadae.go.kr");

만약 email주소와 받는 사람의 이름까지 명시하고 싶다면 다음과 같이 생성하면 될 것이다.

Address address = new InternetAddress("president@chungwadae.go.kr", "노무현");

위 경우처럼 받을 사람의 주소값이 생성이 되었다면 그 내용을 두 가지 방법을 통하여 

전달시킬수가 있는데, 그 메소드는 setFrom() 과 setReplyTo() method이다.

message.setFrom(address)

만약에 여러사람에 메시지를 보내고 싶다면 주소의 배열객체를 만들어 addFrom() 메소드를 이용하여 

message객체에 값을 세팅시킬 수도 있다.

Address address[] = {"ienvyou@orgio.net", "febkang@orgio.net","specular@netsgo.com"};
message.addFrom(address);

이렇게 메시지에 대한 수취인이 정해졌다면 addRecipient() method를 사용할수 있는데 이 메소드는 

주소값옆에서 Message.RecipientType 을 명시하여야 한다.

message.addRecipient(type, address)

해당 수취인의 Type에는 세가지가 있으며 아래와 같다.

Message.RecipientType.TO 
Message.RecipientType.CC 
Message.RecipientType.BCC 

Address toAddress = new InternetAddress("president@chungwadae.go.kr");
Address ccAddress = new InternetAddress("first.lady@chungwadae.go.kr");
message.addRecipient(Message.RecipientType.TO, toAddress);
message.addRecipient(Message.RecipientType.CC, ccAddress);

자바메일은 email 주소가 유효한지를 체크하는 메커니즘이 없다. 만약 체크를 하고 싶다면 

프로그램을 짜는 여러분이 메소드를 만들어서 문법에 맞는 email 주소인지를 체크해내야 할것이다.

 
1 2 3 4
References
 
Copyright ⓒ 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD