SPRING

Spring.스프링 프레임워크 - 메일

calla1013 2025. 6. 7. 12:26

 

[Spring] Gmail SMTP로 이메일 보내기 (앱 비밀번호 포함)

스프링(Spring) 기반 웹 애플리케이션에서 Gmail SMTP를 활용해 메일을 전송하는 방법을 알려드립니다. 특히 구글 2단계 인증을 사용하는 분들을 위해 앱 비밀번호 생성부터 메일 발송까지 전체 과정을 예쁘고 깔끔하게 정리했습니다.


✅ Step 1: Google 계정 설정 (2단계 인증 & 앱 비밀번호)

❗ 앱 비밀번호란?
Gmail에서는 2단계 인증이 활성화된 경우, 일반 비밀번호로 SMTP 연결이 불가능합니다. 반드시 "앱 비밀번호"를 생성해 사용해야 합니다.
  1. myaccount.google.com 접속
  2. 왼쪽 메뉴 → 보안 클릭
  3. 2단계 인증 활성화
  4. 다시 보안 메뉴로 가서 앱 비밀번호 클릭
  5. "앱 선택": 메일 / "기기 선택": Windows 컴퓨터 → 생성
  6. 노란색 16자리 코드를 복사해둡니다 (중요!)

✅ Step 2: pom.xml 의존성 추가


<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
</dependency>

<dependency>
  <groupId>javax.mail</groupId>
  <artifactId>javax.mail-api</artifactId>
  <version>1.6.2</version>
</dependency>

<dependency>
  <groupId>com.sun.mail</groupId>
  <artifactId>javax.mail</artifactId>
  <version>1.6.2</version>
</dependency>

✅ Step 3: mail-context.xml 설정


<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="smtp.gmail.com" />
  <property name="port" value="587" />
  <property name="username" value="your-email@gmail.com" />
  <property name="password" value="앱 비밀번호 16자리" />
  <property name="javaMailProperties">
    <props>
      <prop key="mail.smtp.auth">true</prop>
      <prop key="mail.smtp.starttls.enable">true</prop>
      <prop key="mail.transport.protocol">smtp</prop>
      <prop key="mail.debug">true</prop>
    </props>
  </property>
</bean>
💡 주의: username은 Gmail 주소, password는 실제 비밀번호가 아닌 앱 비밀번호입니다!

✅ Step 4: MailService 구현


@Service
public class MailService {

    @Autowired
    private JavaMailSender mailSender;

    @Async
    public void sendMail(String to, String subject, String content) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");

            helper.setFrom("your-email@gmail.com", "관리자");
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true); // HTML 사용

            mailSender.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

✅ Step 5: MailController 구현


@Controller
public class MailController {

    @Autowired
    private MailService mailService;

    @RequestMapping("/sendMailTest")
    public String sendTestMail() {
        mailService.sendMail(
            "받는사람@example.com",
            "[테스트] Spring 이메일 전송",
            "<h3>메일 테스트입니다 :)</h3>"
        );
        return "home"; // home.jsp 로 이동
    }
}

🎯 최종 확인 사항

  • 2단계 인증을 꼭 활성화해야 합니다
  • 앱 비밀번호는 비밀번호 입력 칸에 사용됩니다
  • SMTP 포트는 587 (TLS) 또는 465 (SSL) 중 하나 사용