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 |