Please Enable JavaScript!
Gon[ Enable JavaScript ]

google SMTP 를 이용해서 java 에서 Email 보내기 테스트

자바(JAVA)
반응형

google SMTP 를 이용해서 java 에서 Email 보내기 테스트

 

개발환경 : JDK 1.5, eclipse-galileo, Junit 3.8.2, window XP

 

web application 작업시 메일 모듈이 붙는 경우가 있다. 회원인증이나 회원들한테

소식지나 제품을 구매했다면 구내 내역을 보낸다던지 많은 경우의 수가 있다.

메일 관련 모듈을 개발하기 위해서는 없어서 안되는 것이 SMTP 서버이다.

메일을 보내는 역할을 하는 서버인데 이것이 있어야 제대로 소스가 구동이

되는지 확인할수 있기 때문이다.

 

대용량 메일 테스트가 아니라면 구글에서 사용하는 메일계정으로 테스트가

가능하다. 구글 메일계정이 있다면 POP3 뿐만 아니라 SMTP 서버도 사용이

가능하다. 대용량을 보내게 되면 불법 사용자로 간주 계정이 차단 될것이므로

주의 하도록 한다. 간단한 메일 모듈 테스트로는 적당한 것 같다.

 

spring framework 에서는 여러가지 유용한 유틸 클래스들이 많이 있는데

그중 하나가 메일을 보낼수 있게 도와주는 클래스이다. org.springframework.mail

패키지에 이런 클래스들이 모여있다.

크게 두 종류로 나눌수 있는데 간단한 메일을 보낼때와 로우 레벨에 대한

제어를 할 수 있는 클래스 두 분류로 나눈다. 간단한 메일을 보낼때는

MailSender 인터페이스와 데이터를 담아서 보낼 캡슐클래스 SimpleMailSender

이 쓰인다. 또한 여기에는 로우레벨의 에러를 감지할수 있는 MailException

제공된다.

 

1. 메일을 보내기위한 준비작업

 

메일을 보내기 위해서는 sun 에서 제공하는 2가지 라이브러리가 필요하다.

dependencies library mail.jar, activation.jar 이다. 아래 URL로 다운로드 한후

이클립스 라이브러리 폴더에 포함시킨다.

(1) JavaMail API  http://java.sun.com/products/javamail/ mail.jar 이다

(2) JAF http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html

activation.jar

 

2. 전체 소스에 대한 설명

 

아래 소스는 단위 테스트를 위한 junit 소스이다. 메일을 간단하게 junit 으로 돌려볼수 있도록

해놓은 것이다. 소스에 들어가는 내용중에 준비해야될 것은 사용자 메일계정과 패스워드이며

SMTP 호스트 네임주소는 gmail-smtp.l.google.com 이다. 특징이 있다면 다중메일을 보낼수

있도록 되어 있는데 메일 사용자 정보를 String[] 배열에 담아서 파라미터로 넘기면 된다 .

 

그리고 다음과 같은 에러가 만난다면 props.put("mail.smtp.starttls.enable","true");  이 부분을

빼먹은 것이니 주의하기 바란다.

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first

 

junit 메일 테스트 전체 소스는 다음과 같다.


import java.util.Properties;

import javax.mail.Authenticator;
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;

import junit.framework.TestCase;


public class MailTest extends TestCase {
	public void testMailSend(){
		try {
			String[] emailList = { "to@naver.com" };// 메일 보낼사람 리스트 
			String emailFromAddress = "from@gmail.com";// 메일 보내는 사람
			String emailMsgTxt = "메일 테스트 내용 "; // 내용
			String emailSubjectTxt = "잘가는지 테스트 중~~~~~~~~~~";// 제목
			
			// 메일보내기 
			postMail(emailList, emailSubjectTxt, emailMsgTxt, emailFromAddress);
			System.out.println("모든 사용자에게 메일이 성공적으로 보내졌음~~");
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
	
	private void postMail(String recipients[], String subject, String message, String from) throws MessagingException {
		boolean debug = false;
		java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
 
		String SMTP_HOST_NAME = "gmail-smtp.l.google.com";
		
		// Properties 설정
		Properties props = new Properties();
		props.put("mail.transport.protocol", "smtp");
		props.put("mail.smtp.starttls.enable","true");
		props.put("mail.smtp.host", SMTP_HOST_NAME);
		props.put("mail.smtp.auth", "true");
 
		Authenticator auth = new SMTPAuthenticator();
		Session session = Session.getDefaultInstance(props, auth);
 
		session.setDebug(debug);
 
		// create a message
		Message msg = new MimeMessage(session);
 
		// set the from and to address
		InternetAddress addressFrom = new InternetAddress(from);
		msg.setFrom(addressFrom);
 
		InternetAddress[] addressTo = new InternetAddress[recipients.length];
		for (int i = 0; i < recipients.length; i++) {
			addressTo[i] = new InternetAddress(recipients[i]);
		}
		msg.setRecipients(Message.RecipientType.TO, addressTo);
 
		// Setting the Subject and Content Type
		msg.setSubject(subject);
		msg.setContent(message, "text/plain");
		Transport.send(msg);
	}
 
	/**
	 * 구글 사용자 메일 계정 아이디/패스 정보
	 */
	private class SMTPAuthenticator extends javax.mail.Authenticator {
		public PasswordAuthentication getPasswordAuthentication() {
			String username =  "id@gmail.com"; // gmail 사용자;
			String password = "password"; // 패스워드;
			return new PasswordAuthentication(username, password);
		}
	}
}
반응형
Posted by 녹두장군1
,