주요글: 도커 시작하기
반응형
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");
    ...

관련링크:


+ Recent posts