반응형
III. 메일 메시지 발신
======================

  메일 메시지를 보내려면 우선 보낼 서버, 수신자, 발신자, 제목, 내용 등이 필요한다.
우선 서버의 지정은 Session을 생성할 때 넘겨주는 Properties에 "mail.smtp.host" 라는
키로 서버 주소를 지정함으로서 SMTP 전송을 처리하는 메일 서버를 지정한다.

  수신자, 발신자, 제목, 내용 등을 지정하려면 우선 이들을 하나의 메시지에 묶는
Message 객체가 필요한데, Message는 추상 클레스이므로 javax.mail.internet 패키지에
있는 MimeMessage를 이용한다.

  발신자는 Message 객체의 setFrom 메소드로 지정하되 InternetAddress 객체를 생성하여
지정한다.  수신자는 Message 객체의 addRecipient 메소드로 지정하되 Message.RecipientType
을 참고하여 지정한다.

  최종적 전송은 Transport 클레스의 static 메소드인 send로 한다.  다음은 일반 텍스트를 
SMTP를 이용하여 간단히 전송하는 예제이다.


String host = "xxx.zzz.com";
String from = "hong@xxx.zzz";
String to = "chun@aaa.bbb";

// 서버 프로퍼티 설정 
Properties props = System.getProperties();
props.put("mail.smtp.host", host);

// Session 객체 생성
Session session = Session.getDefaultInstance(props, null);

// 메시지 생성
MimeMessage message = new MimeMessage(session);
InternetAddress addr = new InternetAddress(from, "홍길동", "euc-kr");

message.setFrom(addr);
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Test Mail");
message.setText("This is a Test Mail");

// 메시지 전송 
Transport.send(message);


  메일 내용을 HTML로 보내려면 Message 객체의 setContent 메소드를 사용하면 된다. setContent
메소드는 Part인터페이스에 정의되어 있는데 Message 클레스는 이를 Implement하도록 되어 있다.
다음은 message 객체에 "text/html" 형식으로 내용을 주는 예제이다.


String content = "<FONT COLOR=BLUE SIZE=20> 안녕하십니까 ? " +
                 "<A HREF=WWW.JAVANURI.COM> 자바누리입니다. </A> </FONT>";
message.setContent(content, "text/html; charset=\"euc-kr\"");


  첨부 화일을 보내는 경우는 Message의 내용을 MultiPart 객체로 설정해야 한다.  MultiPart 클레스는
메시지 내용을 여러가지 부분(BodyPart)으로 구성할 수 있게 해준다.  각각의 내용부분의 BodyPart와
화일부분의 BodyPart를 생성한 후에 이들을 MultiPart에 추가하여 하나의 메시지가되도록 병합한다.
이 MultiPart를 Message의 content로 설정한 후 전송하면 여러개의 첨부화일을 간단히 처리할 수 있다.

  JavaMail API에서 화일을 처리할 경우 FileDataSource, DataHandler 등의 JAF 패키지 클레스들을
사용하게되는데 이는 JAF(JAVABEANS ACTIVATION FRAMEWORK)의 표준 자료 처리방식을 지원하는 클레스들
이다. 

  다음은 MultiPart 및 BodyPart를 구현하는 구체적 클레스 MimeMultiPart, MimeBodyPart를 이용하여
첨부 화일을 전송하는 예제이다.

SendAttachement.java
==============================================================================================
import java.io.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendAttachement {

  //-------------------------------------------
  // main
  //-------------------------------------------
  public static void main (String args[]) throws Exception {

    // 메일서버, 수신자, 발신자, 화일이름
    String host = "www.xxx.com";
    String from = "aaa@javanuri.com";
    String to = "zzz@javanuri.com";      
    String fileName = "mydoc.txt";
      
    // 프로퍼티 설정
    Properties props = new Properties();
    props.put("mail.smtp.host", host); 
  
    // Session 생성
    Session session = Session.getDefaultInstance(props, null);

    // MimeMessage 메시지 생성
    MimeMessage message = new MimeMessage(session);
    InternetAddress addr = new InternetAddress(from, "홍길동", "euc-kr");        
    message.setFrom(addr);
    message.setSubject("첨부 테스트 메일");        
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

    // Multi Part 생성
    Multipart multipart = new MimeMultipart();        
        
    // 메시지 BodyPart 생성 및 Mutil Part에 추가 
    BodyPart messageBodyPart = new MimeBodyPart();
    messageBodyPart.setText("테스트 첨부화일 입니다.");    
    multipart.addBodyPart(messageBodyPart);

    // 첨부 화일 BodyPart 생성 및 Multi Part에 추가 
    BodyPart fileBodyPart = new MimeBodyPart();
    DataSource source = new FileDataSource(fileName);
    fileBodyPart.setDataHandler(new DataHandler(source));
    fileBodyPart.setFileName(fileName);
    multipart.addBodyPart(fileBodyPart);
        
    // Multi Part 메시지에 content로 설정
    message.setContent(multipart);

    // 메일 메시지 전송
    Transport.send(message);
    

  }
   
}

+ Recent posts