71. spring(14)-Login

sumin·2023년 10월 22일
0

아카데미

목록 보기
72/82
post-thumbnail

Email 인증번호 보내기

Depensency


  <dependencies>
  <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context-support</artifactId>
	    <version>${org.springframework-version}</version>
	</dependency>
  
  <!--  Random String 생성 (이메일 인증코드 생성) -->
  <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
	<dependency>
	    <groupId>org.apache.commons</groupId>
	    <artifactId>commons-lang3</artifactId>
	    <version>3.12.0</version>
	</dependency>
  <!-- 이메일 전송 API(javax.mail + spring=context-support) -->
  <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
	<!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
	<dependency>
	    <groupId>com.sun.mail</groupId>
	    <artifactId>javax.mail</artifactId>
	    <version>1.6.2</version>
	</dependency>

이 3가지를 넣어준다 .

Util

RandomString을 생성해 주는 메소드와 메일을 보내주는 메서드를 만든다.

package com.gdu.myhome.util;

import java.util.Properties;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/*
 * google 계정으로 이메일 보내기 위해서 앱 비밀번호를 생성해 둬야 한다.
 * 
 * 1. 구글에 로그인한다. 
 * 2. [계정]- [보안]
 * 3. [2단계인증]-[앱 비밀번호]-[App name] : myhome 입력
 * 4. 생성된 비밀번호를 복사해서 email.properties에 복사 
 */

@PropertySource(value="classpath:email.properties")
@Component
public class MyjavaMailUtils {
  
  @Autowired
  private Environment env;
  
  public void sendJavaMail(String to, String subject, String content) {
    
    try {
      //Properties 객체 생성(이메일 보내는 호스트 정보 )
      Properties properties = new Properties();
      properties.put("mail.smtp.host", env.getProperty("spring.mail.host"));
      properties.put("mail.smtp.port", env.getProperty("spring.mail.port"));
      properties.put("mail.smtp.auth", env.getProperty("spring.mail.properties.mail.smtp.auth"));
      properties.put("mail.smtp.starttls.enable", env.getProperty("spring.mail.properties.mail.smtp.starttls.enable"));
      
      // javax.mail.Session 객체 생성(이메일 보내는 사용자 정보)
      Session session = Session.getInstance(properties, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(env.getProperty("spring.mail.username"), env.getProperty("spring.mail.password"));
        }
      }); 
      
      // 메일 만들기 ( 보내는 사람 + 받는 사람 + 제목 + 내용)
      MimeMessage mimeMessage = new MimeMessage(session);
      mimeMessage.setFrom(new InternetAddress(env.getProperty("spring.mail.username"), env.getProperty("spring.mail.password")));
      mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
      mimeMessage.setSubject(subject);
      mimeMessage.setContent(content, "text/html; charset=UTF-8");
      
      //메일 보내기 
      Transport.send(mimeMessage);
      
      
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Properties

profile
백엔드 준비생의 막 블로그

0개의 댓글