본문 바로가기

Java dev/Java Basic

[java & jsp]JAVA Mail (1) - 텍스트 메일 보내기


1. 간단하게 살펴 보기

SMTP : Simple Mail Transfer Protocol - TCP 25번 port사용

MTA : Mail Transfer Agent - 우체국 역할을 하는 메일 서버용 소프트웨어, ex)sendmail, MS Exchange Server

UA : User Agent - 메일을 작성하고 읽을 수 있는 소프트웨어, ex)outlook, web mail

POP3 : Post Office Protocol 3 - 메일 서버로 부터 PC로 읽어 올 때 사용하는 프로토콜



UA -- SMTP port:25 --> MTA -- SMTP port:25 --> MTA -- file --> Mail Box ----------> Unix Mail

                                                                        -- POP3 --> UA



# 여기서 OS가 Unix인 경우 파일 자체를 읽어 오기 때문에 별도의 전송이 필요하지 않다.

  웹메일인 경우도 유사하다.

# 자세한 내용은 직접 찾아 볼수 있도록 하세요..

  책보고 정리한거라 저도 머 자세히 상담해 드릴 만큼의 능력은 안됩니다.^^;

  그렇다고 코드가 돌아간다고 무턱대로 갖다 쓰기만 하셔도 안되겠죠? ^^



2. API

* 필요한 패키지 2개

1) JavaMail : 최신버젼 다운로드 => http://java.sun.com/products/javamail

    mail.jar - 기본적인 메일 전송시 필요하다.

2) JAF : JavaBeans Activation Framework

    activation.jar - 파일첨부기능이 있을때 필요하다.



* 구조

javax.mail.Session

    - 사용자 이름, 암호, 메일 서버등의 정보 관리

    - JavaMail API를 이용한 모든 작업에서 필요로 한다.

    - javax.servlet.http.HttpSession과는 다른 개념이지만 필요로 하다만 HttpSession객체에 저장할 수 있다.

javax.mail.Message

    - 메일 메세지의 내용과 관련된 추상 클래스

    - 일반적으로 MimeMessage클래스를 이용함.

javax.mail.Address

    - 이메일 주소를 나타냄.

    - 추상클래스이기 때문에 InternetAddress클래스를 이용한다.

javax.mail.Transport

    - 작성된 메일을 MTA로 전달한다.



3. 소스 보면서 이해하기

SMTP HOST는 각자 사용중인 인터넷 회선을 제공하는 ISP회사에 따라서 틀려집니다.

아래를 참조하세요. 저 같은 경우는 한국통신이므로 mail.kornet.net을 씁니다.

누가 kornet.net만 써도 된다고 해서 "mail."이거 빼고 썼다가 이틀 고생했습니다.ㅡㅡ^;

메일 form은 각자에 맞게 만드시면 되겠습니다.

여기서는 넘겨받는 값으로

name : 보내는 사람 이름

from : 보내는 사람 이메일

to : 받는 사람 이메일

content : 보내는 내용

이렇게 해서 초간단 메일 보내기를 해보겠습니다.

다음에 공부 더 한 다음에 참조와 숨은 참조까지 보내는 방법과 파일 첨부해서 보내는

방법도 올릴 예정입니다. 한번에 많이 해봤자 머리만 아프죠..;;



=====================================[Mail.java]==================================

package mail;



import java.util.Properties;

import javax.mail.*;

import javax.mail.internet.*;



public class Mail{

    public void sendMail(String name, String from, String to, String title, String content) throws Exception{

        // 메일 서버

        String host="mail.kornet.net";



        //시스템 프로퍼티를 가져온다.

        Properties prop=System.getProperties();



        //보낼 서버와 연결한 세션을 얻어온다.

        Session session=Session.getDefaultInstance(prop, null);



        //보낼 메세지 객체 생성

        MimeMessage msg=new MimeMessage(session);



        //보낼 사람의이름과 이메일 주소

        msg.setFrom(new InternetAddress(new String(name.getBytes("KSC5601"), "8859_1") + "<"+from+">"));



        //받을 이메일주소

        msg.setRecipients(Message.RecipientType.TO, to);



        //제목

        msg.setSubject(title, "KSC5601");



        //내용, 한칸 이상의 띄워쓰기가 적용되기 위해서 replaceAll()메소드를 이용.

        msg.setText(content.replaceAll(" "," "), "KSC5601");



//메세지를 보낸다.

Transport transport = session.getTransport("smtp");

transport.connect(host, "", "");

transport.sendMessage(msg, msg.getAllRecipients());

transport.close();

    }

}

======================================================================================

위에서 제목과 내용, 이름의 경우 한글이 깨지는 것을 막기 위해 KSC5601로 코드변환을 시켜줍니다.

메제시를 보내는 부분에서는 위에서는 4줄인데 다음과 같이 한줄로 써줄수도 있습니다.

Transport.send(msg);

근데 저는 이렇게 하니 전송 실패하더군요..ㅡㅡa;;...

일단 위와 같이 간단한 메일 전송 프로그램을 만들 수 있습니다.

물론 파일 첨부까지 되는 소스도 쉽게 구할수 있겠습니다만..

아직은 그냥 갖다 쓰는 수준밖에 안되니 좀 그렇네요. 열심히 공부해야 겠습니다.

여러분도 보내진다고 갖다 쓰기만 하지 마시고 연구해보세요..^^



4. ISP별 메일 서버

한국통신 - mail.kornet.net 또는 kornet.net

하나로통신 - mail.hanafos.com

두루넷 - smtp.korea.com 또는 esmtp.korea.com

천리안 - mail.chollian.net

하이텔 - smtp.hitel.net

SK Telecom 싱크로드 - smtp.syncroad.com

넷츠고 - mail.netsgo.com

엘림넷 - mail.elim.net

온세통신 신비로 샤크 - mail.shinbiro.com

보라넷 - mail.bora.net

UNITEL - imail10.unitel.co.kr

I-NET - mail.nuri.net

나우누리 - tiger2.nownuri.net


출처 : http://blog.empas.com/do1231/2127744