본문 바로가기
Language/Java

[JAVA] 자바로 메일 발송하기

by 나비와꽃기린 2016. 10. 27.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
(1) 디펜던시 추가

java 메일발송에 필요한 lib를 추가해줘야 한다.

pom.xml에 다음과 같이 기술한 뒤, 해당 lib가 잘 들어오는지 확인한다.


<dependency>
  <groupId>javax.mail</groupId>
  <artifactId>mail</artifactId>
  <version>1.4.7</version>
</dependency>
maven project가 아니라면 javax.mail 라이브러리를 직접 다운받아 lib 폴더에 넣어주세요.

(2) Java 소스 작성

Controller에서 /mailSender라고 작성하고 Url로 호출하는 식으로 테스트하겠습니다. mail 소스를 작성합니다. 

워낙 메일 보내기 예제들은 이미 많이 나와있기 때문에 간단한 주석으로 설명을 대신하고 넘어가겠습니다.

또한, 소스를 보면 알겠지만 패스워드를 입력해야 하기 때문에 
보통 사내에서 사용할때는 관리자가 메일 발신 전용으로 계정을 생성하여 사용하기도 합니다.

/** 자바 메일 발송 
 * @throws MessagingException 
 * @throws AddressException **/
@RequestMapping(value = "/mailSender")
public void mailSender(HttpServletRequest request, ModelMap mo) throws AddressException, MessagingException {
	
	// 네이버일 경우 smtp.naver.com 을 입력합니다.
	// Google일 경우 smtp.gmail.com 을 입력합니다.
	String host = "smtp.naver.com";
	
	final String username = "XXXXXXXX";       //네이버 아이디를 입력해주세요. @nave.com은 입력하지 마시구요.
	final String password = "YYYYYYYY";   //네이버 이메일 비밀번호를 입력해주세요.
	int port=465; //포트번호
	 
	// 메일 내용
	String recipient = "WWWWWWW@gmail.com";    //받는 사람의 메일주소를 입력해주세요.
	String subject = "메일테스트"; 					  //메일 제목 입력해주세요.
	String body = username+"님으로 부터 메일을 받았습니다."; //메일 내용 입력해주세요.
	 
	Properties props = System.getProperties(); // 정보를 담기 위한 객체 생성
	 
	// SMTP 서버 정보 설정
	props.put("mail.smtp.host", host);
	props.put("mail.smtp.port", port);
	props.put("mail.smtp.auth", "true");
	props.put("mail.smtp.ssl.enable", "true");
	props.put("mail.smtp.ssl.trust", host);
	   
	//Session 생성
	Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
		String un=username;
		String pw=password;
		protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
			return new javax.mail.PasswordAuthentication(un, pw);
		}
	});
	session.setDebug(true); //for debug
	   
	Message mimeMessage = new MimeMessage(session); //MimeMessage 생성
	mimeMessage.setFrom(new InternetAddress("XXXXXXXX@naver.com")); //발신자 셋팅 , 보내는 사람의 이메일주소를 한번 더 입력합니다. 이때는 이메일 풀 주소를 다 작성해주세요.
	mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); //수신자셋팅 //.TO 외에 .CC(참조) .BCC(숨은참조) 도 있음


	mimeMessage.setSubject(subject);  //제목셋팅
	mimeMessage.setText(body);        //내용셋팅
	Transport.send(mimeMessage); //javax.mail.Transport.send() 이용
	
}

제목을 셋팅하는 부분에서 한글이 깨진다면 다음 포스팅을 참조하여 소스를 바꿔줍시다. >> http://mkil.tistory.com/340



여기서, 하나만 더 생각해 보면 보통 메일을

사용할 때 text만 사용하는 경우도 있지만 광고처럼 html 파일이 오는 경우도 있죠? html을 보내는 방법에 대한 포스팅은 여기를 참조해주세요~ >>(포스팅예정)




 (3) 실행

http://localhost:port/contextRoot/mailSender 를 인터넷 URL창에서 호출합니다.

그럼 서버 콘솔에 다음과 같이 로그가 찍히게 됩니다. 

보낸사람부터 받는사람까지에 대한 정보와 함께 mail 정보들이 출력되며 일련의 과정을 거친뒤 QUIT과 함께 메일이 보내집니다.




 

(4) 결과확인


받은사람의 메일에 들어가봐서 확인을 해봤습니다.




소스에서 설정했던 제목과 내용, 발송인으로부터 메일이 왔음을 확인했습니다.

 

 

다음 예제는 이렇게 한 사람에게 보내는게 아닌

다중 유저에게 메일을 보내는걸 설명할게요.

포스팅은 여기를 보시면 되겠습니다 ^^   >> (포스팅예정)