저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

'파일 첨부'에 해당되는 글 1건

  1. 2006.02.21 Jakarta Commons Email 사용하여 이메일 발송하기 (4)
Commons Email을 사용하여 이메일을 발송하는 방법을 살펴본다.

Commons Email을 사용한 메일 발송하기

Jakarta Commons Email API는 이메일 발송을 쉽게 처리하기 위한 클래스를 제공하는 모듈로서, 내부적으로 Java Mail API와 JavaBeans Activation API를 사용한다. Commons Email API는 메일 발송을 처리해주는 SimpleEmail, HtmlEmail과 같은 클래스를 제공하고 있으며, 이들 클래스를 사용하여 일반 텍스트메일, HTML 메일, 첨부 메일 등을 매우 간단(simple!!)하게 발송할 수 있다. 본 글에서는 Jakarta Commons Email API를 사용하여 쉽게 메일을 발송하는 방법에 대해서 살펴보도록 하겠다.

Commons Email 다운로드 및 설치

Commons Email은 아래의 URL에서 다운로드 받을 수 있다.

위 URL에서 바이너리 파일 commons-email-1.0.zip을 다운로드 받은 후 압축을 풀면 commons-email-1.0.jar 파일이 생성되는데, 이 파일을 클래스패스에 추가해주면 Commons Email API를 사용할 수 있게 된다. 앞서 언급한대로 Commons Email API는 Java Mail API와 JavaBeans Activation API를 내부적으로 사용하고 있기 때문에 이 두 API도 클래스패스에 추가해주어야 한다. 이 두 API는 아래의 URL에서 다운로드 받을 수 있다.

Commons Email API, Java Mail API 그리고 JavaBeans Activation API가 준비됐으면 이제 메일 발송할 준비가 끝난 셈이다.

간단한 텍스트 메일 보내기

org.apache.commons.mail.SimpleEmail 클래스를 사용하면 일반 텍스트 메일을 발송할 수 있다. SimpleEmail 클래스를 사용해서 텍스트 메일을 발송하는 코드는 다음과 같다. (별다른 설명이 필요없을 정도로 간단하다.)

    SimpleEmail email = new SimpleEmail();
    email.setCharset("euc-kr");    email.setHostName("mail.somehost.com");  // SMTP 서버를 지정
    email.addTo("madvirus@empal.com", "최범균"); // 수신자를 추가
    email.setFrom("madvirus@madvirus.net", "범균"); // 보내는 사람 지정
    email.setSubject("텍스트 테스트 메일입니다."); // 메일 제목
    email.setContent("테스트 메일의 내용입니다.", "text/plain; charset=euc-kr");
    email.send(); // 메일 발송

위에서 주의할 코드는 굵게 표시한 부분의 코드이다. 먼저, email.setCharset("euc-kr")을 사용해서 메일의 캐릭터셋이 euc-kr 이라고 지정하고 있는데, 이를 표시하지 않으면 메일 제목이나 보내는 사람 이름등에 있는 한글이 깨지게 된다. 더 중요한 점은 email.setCharset("euc-kr")을 실행해도 메일 내용의 한글은 올바르게 처리되지 않는다는 점이다. 메일 내용에 포함된 한글을 올바르게 처리하기 위해서는 위 코드에서와 같이 email.setContent()를 실행할 때, 두번째 인자값으로 캐릭터셋을 지정해주어야 한다. (이를 지정하지 않으면 내용의 한글이 깨지므로 꼭 기억해야 한다.)

HTML 메일 보내기

HTML 형식으로 된 이메일을 보내는 방법은 텍스트 형식의 메일을 보내는 것과 매우 비슷하다. 차이점은 org.apache.commons.mail.HtmlEmail 클래스를 사용한다는 점이다. 다음 코드는 HtmlEmail 클래스를 사용하여 HTML 형식의 메일을 보내는 예제 코드이다.

    HtmlEmail email = new HtmlEmail();
    email.setCharset("euc-kr");
    email.setHostName("mail.somehost.com");
    email.addTo("madvirus@empal.com", "최범균");
    email.setFrom("madvirus@madvirus.net", "범균");
    email.setSubject("HTML 테스트 메일입니다.");
    
    email.setHtmlMsg("<html>아파치 로고 - <img src=\"http://www.apache.org/images/asf_logo_wide.gif\"></html>");
    email.send();

SimpleEmail을 보내는 경우와 달리 email.setHtmlMsg()를 사용하여 메일 내용을 입력할 때 캐릭터셋을 별도로 지정하지 않아도 한글이 깨지지 않는다.

파일 첨부하기

파일을 첨부하기 위해서는 org.apache.commons.mail.EmailAttachment 클래스와 org.apache.commons.mail.MultiPartEmail 이메일을 사용하면 된다. EmailAttachment 클래스는 첨부할 파일을 지정할 때 사용하고, MultiPartEmail 이메일을 파일을 이메일에 첨부해주는 기능을 제공한다. 다음은 파일 첨부 예제 코드이다.

    EmailAttachment attachment = new EmailAttachment();
    attachment.setPath("d:\\commons-email-1.0.zip");
    attachment.setDisposition(EmailAttachment.ATTACHMENT);
    attachment.setDescription("commons-email api");
    attachment.setName("commons-email-1.0.zip"); // 파일의 이름을 지정
    
    MultiPartEmail email = new MultiPartEmail();
    email.setCharset("euc-kr");
    email.setHostName("mail.somehost.com");
    email.addTo("madvirus@empal.com", "최범균");
    email.setFrom("madvirus@madvirus.net", "범균");
    email.setSubject("첨부 파일 테스트 메일입니다.");
    email.setMsg("이건 내용입니다.");
    
    email.attach(attachment);    
    email.send();

EmailAttachment 객체를 생성한 뒤 email.attach()를 사용해서 첨부할 파일을 추가해주기만 하면 된다. 주의할 점은 1.0 버전의 Commons Email은 파일명을 한글로 전달할 경우, 파일명이 올바르게 전달되지 않고 깨져서 간단하는 점이다. (파일 자체는 올바르게 전송된다.) 따라서 1.0 버전의 Common Email을 사용하여 파일을 전송할 때에는 알파벳과 숫자로만 구성된 이름의 파일을 전송하도록 하자.) 실제 파일명은 한글이 포함되더라도, EmailAttachment.setName() 메소드를 사용해서 파일명을 변경해서 전송할 수도 있다.

앞서 살펴봤던 HtmlEmail 클래스는 MultiPartEmail 클래스를 상속받기 때문에 HtmlEmail 클래스를 사용할 때에도 attach() 메소드를 사용하여 파일을 첨부할 수 있다.

SMTP 인증 처리

SMTP 서버를 사용할 때에는 SMTP 인증이 필요한 경우도 있는데, 이럴 때에는 다음과 같이 setAuthentication() 메소드를 사용하면 된다.

    SimpleEmail email = new SimpleEmail();
    email.setCharset("euc-kr");
    email.setHostName("mail.somehost.com");
    email.setAuthentication("madvirus", "password");
    ...

관련링크:


Posted by 최범균 madvirus

댓글을 달아 주세요

  1. 아라리요 2013.07.17 14:15 신고  댓글주소  수정/삭제  댓글쓰기

    작성하신지 오래되어서 그런지 링크걸어주신곳에서 받을 수 있는 jar가 java mail api뿐입니다. 혹시 갱신해주실 수 있으신가요?

  2. 아라리요 2013.07.24 12:25 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다 ^^
    근데 제 로컬에서는 잘 되는데 서버에 올리니까 메일 발송에서 에러가 나네요 ㅎ;;
    메일 서버에 릴레이를 설정해주라는 말을 어디서 본거 같은데 무슨 말인지...

    • 최범균 madvirus 2013.07.29 11:38 신고  댓글주소  수정/삭제

      이건,, 메일 서버의 릴레이 허용 부분을 설정해 주어야 할 것 같은데요. 이 부분은 메일 서버 마다 설정하는 방법이 달라서, 메일 서버를 관리하시는 분과 얘기를 해 보셔야 할 것 같습니다.