본문 바로가기

Language/Java / JSP

[Java] Gmail SMTP를 이용한 메일 보내기

반응형


java로 메일을 보내야 할 경우 자체적으로 smtp 서버가 없다면 외부 smtp 서버를 이용하여 메일을 보내야 한다.


오늘은 Gmail의 smtp 서버를 이용하여 메일 보내기를 해보자.
Gmail의 smtp를 사용하려면 구글 계정이 필요하다. 구글 계정은 아래 링크에서 가입후 사용할 수 있다.

https://www.gmail.com/intl/ko/mail/help/about.html


기존에 구글 계정이 있더라도, 계정을 여러개 만들 수 있으니 메일 발신 전용으로 계정을 생성하는것이 좋을 수 있다.


해당 프로그램을 작성하려면 java-mail 라이브러리가 필요하다. 라이브러리를 다운받자.

mail.jar


import java.util.Date;
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.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMailTest {

	public static void main(String[] args) {
		
		Properties p = System.getProperties();
		p.put("mail.smtp.starttls.enable", "true"); 	// gmail은 무조건 true 고정
		p.put("mail.smtp.host", "smtp.gmail.com");		// smtp 서버 주소
		p.put("mail.smtp.auth","true");    				// gmail은 무조건 true 고정
		p.put("mail.smtp.port", "587"); 				// gmail 포트
		  
		Authenticator auth = new MyAuthentication();
		
		//session 생성 및  MimeMessage생성
		Session session = Session.getDefaultInstance(p, auth);
		MimeMessage msg = new MimeMessage(session);
		
		try{
			//편지보낸시간
			msg.setSentDate(new Date());
			
			InternetAddress from = new InternetAddress() ;
			
			
			from = new InternetAddress("test<test@gmail.com>");
			
			// 이메일 발신자
			msg.setFrom(from);
			
			
			// 이메일 수신자
			InternetAddress to = new InternetAddress("test@naver.com");
			msg.setRecipient(Message.RecipientType.TO, to);
			
			// 이메일 제목
			msg.setSubject("메일 전송 테스트", "UTF-8");
			
			// 이메일 내용 
			msg.setText("내용", "UTF-8");
			
			// 이메일 헤더 
			msg.setHeader("content-Type", "text/html");
			
			//메일보내기
			javax.mail.Transport.send(msg);
			
		}catch (AddressException addr_e) {
			addr_e.printStackTrace();
		}catch (MessagingException msg_e) {
			msg_e.printStackTrace();
		}
	}

}


class MyAuthentication extends Authenticator {
	 
    PasswordAuthentication pa;
   

    public MyAuthentication(){
    	
    	String id = "test@gmail";		// 구글 ID
    	String pw = "test123";			// 구글 비밀번호

        // ID와 비밀번호를 입력한다.
    	pa = new PasswordAuthentication(id, pw);
     
    }

    // 시스템에서 사용하는 인증정보
    public PasswordAuthentication getPasswordAuthentication() {
        return pa;
    }
}



이메일 헤더를 "text/html"로 하면 본문 내용으로 HTML 을 작성하여 전송할 수 있다.