하은양 믿음군 효실맘 호홍홍집s

simpleemail 을 이용한 간단한 메일보내기 본문

가벼운 배움/jsp

simpleemail 을 이용한 간단한 메일보내기

호홍홍집 2015. 7. 28. 10:19

http://javacan.tistory.com/107 : 참조

간단한 텍스트 메일 보내기

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");
    ...


관련링크: