Search

2016년 10월 22일 토요일

[Java] [Library] 이메일 보내는 프로그램 만들기. (JavaMail API 이용)

#1. 들어가기
자바로 프로그래밍을 하다보면, 작업을 완료했거나, 에러가 생겼을때, 혹은 특정 시점에 메세지나 이메일을 사용자에게 보내주는 알림 기능이 필요할 때가 있다.
이번 글에서는 간단하게 JavaMail API와 네이버메일을 이용해 메일링하는 방법을 알아본다.



#2. 네이버메일 SMTP 설정하기
먼저 네이버에 로그인해서 환경설정을 해줘야 한다.

  2-1. 네이버 로그인

  2-2. '메일' 들어가기








  2-3. '환경설정' 들어가기







  2-4. 'SMTP' 설정하기
















- SMTP 설정을 하게되면 아래와 같은 정보를 확인할 수 있다.









#3. JavaMail API 다운받기
메이븐 레파지토리에는 거의 없는게 없다.. 이곳에서 다운받아보자.
https://mvnrepository.com/artifact/javax.mail/mail/1.4.7



























#4. Eclipse에서 Java 프로그래밍
이제 환경설정은 다 끝났으니, 본격적으로 이클립스에서 메일을 보내보자.

  4-1. 다운받은 mail-1.4.7.jar파일을 라이브러리에 추가하기
먼저, mail-1.4.7.jar 파일을 복사한 후, 자바프로젝트에 붙여넣어주자.
(개인적으로 정리하는 편이 프로그래밍을 할 때 편해서 lib폴더를 만들어 안에 넣었다.)
다음으로, 붙여넣은 jar파일에 마우스를 대고 우클릭을 한 후에 Build Path -> Add to Build Path를 눌러주자.




- 제대로 jar파일을 추가했다면, 아래와 같이 Referenced Libraries에 추가된다.












  4-2. 간단한 메일보내기 프로그램 작성하기
나름 작명을 해서(?) SendEmail이라는 클래스를 하나 만들었다.
(역시 정리를 위해 kr.sam.dev.martin이라는 패키지를 만들었는데, 저것까지 따라 만들 필요는 없다... 작명은 다들 취향것...)

① 보내는 쪽의 메일 설정 부분. (우리는 네이버로 설정을 했었다.)
② 받는 사람의 메일 주소.
③ 메일 제목.
④ 메일 내용.




























- SendEmail 클래스의 소스코드

package kr.sam.dev.martin;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendEmail {
 public static void main(String[] args) {

  String host     = "smtp.naver.com";
  final String user   = "NAVER_ID";
  final String password  = "PASSWORD";

  String to     = "ruserive@gmail.com";

  
  // Get the session object
  Properties props = new Properties();
  props.put("mail.smtp.host", host);
  props.put("mail.smtp.auth", "true");

  Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(user, password);
   }
  });

  // Compose the message
  try {
   MimeMessage message = new MimeMessage(session);
   message.setFrom(new InternetAddress(user));
   message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

   // Subject
   message.setSubject("[Subject] Java Mail Test");
   
   // Text
   message.setText("Simple mail test..");

   // send the message
   Transport.send(message);
   System.out.println("message sent successfully...");

  } catch (MessagingException e) {
   e.printStackTrace();
  }
 }
}


  4-3. 테스트 및 확인
프로그램을 실행시키면 아래처럼 메일이 성공적으로 보내졌단 메세지가 뜬다.






그리고 받은쪽 메일에 들어가보면 아래처럼 내가 보낸 메일이 와있는 것을 확인할 수 있다.

















어때요 JavaMail API를 이용한 메일보내기, 참 쉽죠?






댓글 10개:

  1. 안녕하세요.

    혹시 서블릿에서 실행 되는건가요?

    답글삭제
    답글
    1. 라이브러리 가져다 쓰면 서블릿에서도 실행가능합니다.

      삭제
    2. https://mvnrepository.com/artifact/javax.mail/mail/1.4.7

      삭제
  2. 혹시 시간에 맞춰서 메일링 하는 방법은 있나요?

    답글삭제
    답글
    1. 네, OS환경에 따라 배치 작업을 실행해주는 프로그램이 다른데, 충분히 가능합니다. ^^

      삭제
  3. 혹시 DB에 있는 이메일 데이터를 불러와서 불러온 이메일 데이터로 메세지 넘기려고 하는데 방법이 있을까요?? ㅠㅠ

    답글삭제
    답글
    1. 네, jdbc를 통해 하실 수 있습니다. 아마 jdbc를 통한 연결을 검색하시면 많은 참고 사이트들이 나올거에요 ^^

      삭제
  4. 이거 스프링 프로젝트에서만 실행가능한건가요? 다이나믹웹프로젝트에서는 안되는건가요?

    답글삭제
  5. 안녕하세요. 1.4.7 라이브러리 추가하고 위에 java파일 1개만으로 실행되나요? 다른 곳 보니 pom.xml?? 세팅하던데요.. !
    그리고 현재 저의 상태는 MimeMessage message = new MimeMessage(session);부분에서 에러납니다.. ㅠㅠ

    답글삭제