반응형

# 자바 이메일 보내기 구현(Gmail SMTP)

## gmail 설정하기

  • 다시 보안 탭에서 2단계 인증 설정 밑에있는 앱 비밀번호 진입
  • 앱 비밀번호를 생성할 앱 및 기기를 선택에서 앱 선택은 기타 선택 후 이름 입력하여 확인, 우측에 발급된 비밀번호 기억 ( 해당 비밀번호가 유출될 경우 구글 계정에 위험이 생길 수 있으니 유출되지 않도록 하기.. )

 

## Gmail SMTP 

  • 해당 파일을 WEB-INF 내 lib에 저장 후 Build Path 진행

mail-1.4.7.jar
0.50MB

  • Gmail SMTP 이용을 위해 인증용 파일, 사용할 파일 구성
  • 먼저 인증용 파일( 구글아이디, 발급받은 패스워드 입력 )
package com.sbs.java.blog.util;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
 
public class MailAuth extends Authenticator{
    
    PasswordAuthentication pa;
    
    public MailAuth() {
        String mail_id = "구글 아이디"
        String mail_pw = "발급 받은 비밀번호";
        
        pa = new PasswordAuthentication(mail_id, mail_pw);
    }
    
    public PasswordAuthentication getPasswordAuthentication() {
        return pa;
    }
}
  • 메일 발송 내역 입력 등 진행할 파일
package com.sbs.java.blog.util;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

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

public class MailSend {

	public void welcomeMailSend() {

		Properties prop = System.getProperties();
		
        // 로그인시 TLS를 사용할 것인지 설정
		prop.put("mail.smtp.starttls.enable", "true");
        
		// 이메일 발송을 처리해줄 SMTP서버
		prop.put("mail.smtp.host", "smtp.gmail.com");
        
		// SMTP 서버의 인증을 사용한다는 의미
		prop.put("mail.smtp.auth", "true");
        
		// TLS의 포트번호는 587이며 SSL의 포트번호는 465이다.
		prop.put("mail.smtp.port", "587");

		Authenticator auth = new MailAuth();

		Session session = Session.getDefaultInstance(prop, auth);

		MimeMessage msg = new MimeMessage(session);

		try {
			// 보내는 날짜 지정
			msg.setSentDate(new Date());

			// 발송자를 지정한다. 발송자의 메일, 발송자명
			msg.setFrom(new InternetAddress("아이디@gmail.com", "표시될 이름"));
			
            // 수신자의 메일을 생성한다.
			InternetAddress to = new InternetAddress("아이디@gmail.com");
			
            // Message 클래스의 setRecipient() 메소드를 사용하여 수신자를 설정한다. setRecipient() 메소드로 수신자, 참조,
			// 숨은 참조 설정이 가능하다.
			// Message.RecipientType.TO : 받는 사람
			// Message.RecipientType.CC : 참조
			// Message.RecipientType.BCC : 숨은 참조
			msg.setRecipient(Message.RecipientType.TO, to);
			
            // 메일의 제목 지정
			msg.setSubject("환영합니다.", "UTF-8");
			
            // Transport는 메일을 최종적으로 보내는 클래스로 메일을 보내는 부분이다.
			msg.setText("가입을 축하드립니다.", "UTF-8");

			Transport.send(msg);

		} catch (AddressException ae) {
			System.out.println("AddressException : " + ae.getMessage());
		} catch (MessagingException me) {
			System.out.println("MessagingException : " + me.getMessage());
		} catch (UnsupportedEncodingException e) {
			System.out.println("UnsupportedEncodingException : " + e.getMessage());
		}
	}
}
반응형

+ Recent posts