SMTP 설정하기

SMTP 설치 확인

SMTPException.java

package bean.mail;
/**
 * <pre>
 * SMTPException.java
 * SMTPBean에서 예외상황 발생시 에러를 Catch 하기위한 Class
 * error내용을 String으로 저장한후 getMessage() 메소드에 돌려준다.
 * </pre>
 *
 */
public class SMTPException extends Exception {
   private String message;
   /**
    * SMTPBean으로 부터 발생되어 던져지는 에러를 String형 message에 저장
    * @param message 애러 메시지
    */
   public SMTPException(String message) {
    this.message = message;
   }
   /**
    * 에러메시지를 Return (OverRided)
    */
   public String getMessage() {
    return message;
   }
  } 

SMTPBean.java

package bean.mail;
/**
 * SMTPBean.java
 * 실제 메일을 보내는 Bean
 */
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
public class SMTPBean implements  Serializable{
 private static final long serialVersionUID = 7932385610577799446L;
 
 private  Socket smtp;               //SMTP 서버 접속용 소켓
 
 private  String serverReply;        //서버의 응답을 저장하기 위한것
 private  BufferedReader input; 
 private  PrintStream output;
 
 private  String smtpServer="220.85.114.31"; //SMTP서버 아이피
 private  int port = 25;               //SMTP서버 포트
 
 private  String subject; //메일 전송 관련
 private  String message;
 private  String from;
 private  String to;
 /**
  * 보내는 이 설정
  * @param from 보내는 사람
  */
 public void setFrom(String from) {
  this.from = from;
 }
 /**
  * 받는 이 설정
  * @param to 받는사람
  */
 public void setTo(String to) {
  this.to = to;
 }
 /**
  * 제목 설정
  * @param subject 제목
  */
 public void setSubject(String subject) {
  this.subject = subject;
 }
 /**
  * 메시지 설정
  * @param message 메시지
  */
 public void setMessage(String message) {
  this.message = message;
 }
 /**
  * 생성자
  */
 public SMTPBean() {}
 /**
  * 메일 전송
  * @throws SMTPException 애러 처리
  */
 public void sendMail() throws SMTPException{
  connect();
  hail(from, to);
  sendMessage(from, to, subject, message);
  logout();
 }
 
 /**
  * <pre>
  * PrintStream을 서버에 보냄
  * 접속후 서버로 부터의 응답을 파악(2XX or 3XX)인 경우 서비스 준비OK
  * input을 위한 BufferedReader와 함께 새로운 서버 소켓을 생성
  * </pre>
  */
 private void connect() throws SMTPException {
  try {
   smtp = new Socket(smtpServer, port);
   input = new BufferedReader(new InputStreamReader(smtp.getInputStream()));
   //접속된 메일서버에게 출력을 보내기위한 스트림을 생성한다. 
   output = new PrintStream(smtp.getOutputStream()); 
   serverReply = input.readLine();
   if (serverReply.charAt(0) == '2' || serverReply.charAt(0) == '3') { //서버의 응답이 2XX or 3XX
   }
   else {
    throw new SMTPException("Error connecting to SMTP server " + smtpServer + " on port " + port);
   }
  }
  catch(Exception e) {
   throw new SMTPException(e.getMessage());
  }
 
  //System.out.println(serverReply); 
  //System.out.println("connect complete.");
 }
 
 /**
  * 메일 보낸는이, 받는이등을 메일서버에게 알림...
  * @param from 보내는 이
  * @param to 받는 이
  * @throws SMTPException 에러
  */
 private void hail(String from,  String to) throws SMTPException {
  if (submitCommand("HELO " + smtpServer))
   throw new SMTPException("Error occurred during HELO command.");
  if (submitCommand("MAIL FROM: " + from))
   throw new SMTPException("Error during MAIL command.");
  if (submitCommand("RCPT TO: " + to))
   throw new SMTPException("Error during RCPT command.");
 }
 
 
 /**
  * <pre>
  * 실제 메일을 전송
  * [참고] DATA명령은 SMTP 서버에게 메일을 보낸다고 일리는 기능
  * </pre>
  *
  * @param from 보내는 이
  * @param to 받는 이
  * @param subject 제목
  * @param message 내용
  * @throws SMTPException 에러
  */
 private void sendMessage(String from,  String to,  String subject,  String message) throws SMTPException {
  Date ldate_today = new Date(System.currentTimeMillis());
  SimpleDateFormat lgmt_date = new SimpleDateFormat("d MMM yyyy HH:mm:ss 'GMT'");
  lgmt_date.setTimeZone(TimeZone.getTimeZone("GMT"));
  lgmt_date.format(ldate_today);
  try  { 
   if (submitCommand("DATA"))  throw new SMTPException("Error during DATA command.");
   String header = "From: " + from + "\r\n";
   header += "To: " + to + "\r\n";
   header += "Subject: " + han(subject) + "\r\n";
   header += "Date: " + lgmt_date + "\r\n\r\n";
   if (submitCommand(header + han(message) + "\r\n."))
    throw new SMTPException("Error during mail transmission.");  
  }
  catch (Exception e)   {   }
 }
 
 /**
  * 서버에 명령을 보낸후 응답을 보낸다.
  *
  * @param command 보내는 명령
  * @return 처리 결과 (true : error)
  * @throws SMTPException 애러
  */
 private boolean submitCommand(String command) throws SMTPException {
  try {
   output.print(command + "\r\n");
   serverReply = input.readLine();
   System.out.println(command + " : " +serverReply);
   if (serverReply.charAt(0) == '4' || serverReply.charAt(0) == '5') //전송실패등..
    return true;
   else
    return false;
  }
  catch(Exception e) {
   throw new SMTPException(e.getMessage());
  }
 }
 /**
  * SMTP서버의 최근의 응답을 돌려줌
  * @return 서버 응답
  */
 public String getServerReply() {
  return serverReply;
 }

 /**
  * SMTP 서버의 포트번호를 돌려줌
  * @return 포트번호
  */
 public  int getPort(){
  return port;
 }
 /**
  * SMTP서버 포트 재 설정
  * @param newPort 포트번호
  */
 public void setPort(int newPort){
  port = newPort;
 }
 /**
  * SMTP 서버 IP를 알려준다
  * @return 서버 IP
  */
 public  String getSmtpServer(){
  return smtpServer;
 }
 /**
  * SMTP 서버 IP 설정
  * @param newSmtpServer
  */
 public void setSmtpServer(String newSmtpServer){   
  smtpServer = newSmtpServer;
 }
 /**
  * SMTP 서버로 부터 LogOut을 처리한다.
  * @throws SMTPException 애러
  */
 private void logout() throws SMTPException {
  try {
   if (submitCommand("Quit"))
    throw new SMTPException("Error during QUIT command");
   input.close();
   output.flush();
   output.close();
   smtp.close();
  }
  catch(Exception e) {
  }
 }
 /**
  * 한글 변환 처리
  * @param Unicodestr 유니코드 한글
  * @return KSC5601 전환
  * @throws UnsupportedEncodingException 애러처리
  */
 public static String han(String Unicodestr) throws UnsupportedEncodingException {     
  if( Unicodestr == null)   return null;  
  return new String(Unicodestr.getBytes("8859_1"),"KSC5601");  
 }  
}

Test.java

import bean.mail.SMTPBean;
import bean.mail.SMTPException;

public class Test {
 public static void main(String[] args){
  new Test();
 }
 
 public Test(){
  SMTPBean smtp = new SMTPBean();
  //server connect setting
  smtp.setFrom("test@test.com");
  smtp.setTo("test@test.com");   
  smtp.setSubject("title");
  smtp.setMessage("message"); 
 
  //send message
  try {
   smtp.sendMail();
  } catch (SMTPException e) {
   e.printStackTrace();
  }
 
 }
}

'etc > old' 카테고리의 다른 글

MP3 플레이어 만들기  (0) 2008.10.19
MECE(Mutually Exclusively, Collectively Exhaustive)  (0) 2008.10.13
FMS3에서 신호처리 방식  (0) 2008.10.01
FMS3 - 간단한 접속 테스트  (0) 2008.09.30
FMS3 (FLASH MEDIA SERVER) 설치하기  (0) 2008.09.30

+ Recent posts