Develop/Java

[Java] Spring Boot 활용 Email 발송하기

DevPi 2024. 9. 2. 14:10
반응형

이 포스트에서는 스프링 부트를 사용하여 간단한 이메일 전송 API를 구현하는 방법을 설명합니다. 이메일 전송 기능은 여러 웹 애플리케이션에서 유용하게 사용되며, 스프링 부트와 JavaMailSender를 활용하면 간단히 구현할 수 있습니다.


Gradle 설정

이메일 전송 기능을 구현하기 위해 필요한 의존성을 build.gradle 파일에 추가합니다.

plugins {
    id 'org.springframework.boot' version '3.1.0'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

위의 설정을 저장한 후, Gradle을 리프레시하여 필요한 라이브러리를 다운로드합니다.

 

application.yml 설정

이메일 전송을 위해 SMTP 서버 설정을 src/main/resources/application.yml 파일에 추가합니다. 여기서는 Gmail의 SMTP 서버를 사용합니다.

spring:
  mail:
    host: smtp.gmail.com
    port: 587
    username: your-email@gmail.com
    password: your-email-password
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

여기서 username과 password는 실제 이메일 계정 정보로 변경해야 합니다. Gmail의 경우, 보안을 위해 앱 비밀번호를 생성하여 사용하는 것을 권장합니다.

 

 

MailConfig 클래스 설정

설정 파일의 민감한 정보를 관리하고 이메일 전송 기능을 설정하기 위한 Configuration 클래스를 생성합니다. MailConfig.java라는 클래스를 config 패키지에 추가합니다.

package com.example.emailservice.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;

@Configuration
public class MailConfig {

    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.gmail.com");
        mailSender.setPort(587);
        mailSender.setUsername("your-email@gmail.com");
        mailSender.setPassword("your-email-password");

        Properties props = mailSender.getJavaMailProperties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.starttls.required", "true");
        props.put("mail.debug", "true");  // 디버그 로그 활성화 (필요에 따라 제거)

        return mailSender;
    }
}

이 Config 클래스는 JavaMailSender를 Bean으로 등록하여 애플리케이션 전반에서 이메일 전송 기능을 사용할 수 있도록 설정합니다.

 

 

이메일 서비스 클래스 작성

이제 실제로 이메일을 전송하는 로직을 구현합니다. EmailService라는 클래스를 생성하고 메일을 전송하는 메서드를 추가합니다.

package com.example.emailservice.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    @Autowired
    private JavaMailSender mailSender;

    public void sendSimpleEmail(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);
        message.setFrom("your-email@gmail.com");  // 보내는 사람의 이메일

        mailSender.send(message);
    }
}

 

 

이메일 전송 API 컨트롤러 작성

이제 API 엔드포인트를 구현하여 이메일을 전송할 수 있게 만듭니다. EmailController 클래스를 작성합니다.

package com.example.emailservice.controller;

import com.example.emailservice.service.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class EmailController {

    @Autowired
    private EmailService emailService;

    @PostMapping("/send-email")
    public String sendEmail(@RequestParam String to,
                            @RequestParam String subject,
                            @RequestParam String text) {
        emailService.sendSimpleEmail(to, subject, text);
        return "Email sent successfully!";
    }
}

 

 

실행 및 테스트

이제 모든 설정이 완료되었으므로 애플리케이션을 실행하고 이메일 전송 API를 테스트할 수 있습니다.

  • POST 요청 URL: http://localhost:8080/api/email/send
  • 파라미터:
    • to: 수신자 이메일 주소
    • subject: 이메일 제목
    • text: 이메일 내용

Postman이나 브라우저에서 위 URL로 요청을 보내면 이메일이 정상적으로 전송되는 것을 확인할 수 있습니다.


이렇게 해서 스프링 부트를 활용하여 간단한 이메일 전송 API를 구현해 보았습니다. 추가적으로 보안 설정을 강화하거나 예외 처리를 추가하여 API의 완성도를 높일 수 있습니다.

반응형