220829 스프링으로 이메일 서비스

Jongleee·2022년 8월 30일
2

TIL

목록 보기
40/576

스프링으로 이메일 서비스

  1. Spring boot
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.3.4.RELEASE</version>
</dependency>
  1. 메일 서버 속성 Properties
    Spring에서 Java 메일 지원을 위한 클래스오 인터페이스들은 다음과 같습니다.
  1. MailSender interface

: 간단한 메일 전송 위한 기본 기능 제공하는 최상위 인터페이스

  1. JavaMailSender interface

: MailSender의 서브 인터페이스. MIME 메세지들과 Mime 메세지의 생성을 위한 헬퍼 클래스와 함께 사용. MimeMessagePreparator 매커니즘과 함께 사용하는 것을 추천함.

  1. JavaMailSenderImpl class

: JavaMailSender의 인터페이스 구현체. MimeMessage와 SimpleMailMessage를 지원함.

  1. SimpleMailMessage class

: 수신자, 발송인, 추친, 제목 및 내용 등을 포함한 간단한 메일 메시지를 생성하는데 사용함.

  1. MimeMessagePreparator interface

: MIME 메세지의 준비에 있어 콜백 인터페이스를 제공함.

  1. MimeMessgeHelper class

: MIME 메세지를 만드는 헬퍼 클래스. 이미지 지원을 제공하고, 형식적인 메일 첨부물과 HTML 레이아웃의 텍스트 컨텐츠를 제공합니다.

3.1 Spring Mail Server Properties
빈 등록 옵션

@Bean
public JavaMailSender getJavaMailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setHost("smtp.gmail.com");
    mailSender.setPort(587);
    
    mailSender.setUsername("my.gmail@gmail.com");
    mailSender.setPassword("password");
    
    Properties props = mailSender.getJavaMailProperties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.debug", "true");
    
    return mailSender;
}

3.2 Spring Boot Mail Server Properties
보내는 사람의 서버 주소 설정, 아이디 비번 설정

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=<login user to smtp server>
spring.mail.password=<login password to smtp server>
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

4.1 기본 메일 보내기
메일을 보냅니다.

@Component
public class EmailServiceImpl implements EmailService {

    @Autowired
    private JavaMailSender emailSender;

    public void sendSimpleMessage(
      String to, String subject, String text) {
        ...
        SimpleMailMessage message = new SimpleMailMessage(); 
        message.setFrom("noreply@baeldung.com");
        message.setTo(to); 
        message.setSubject(subject); 
        message.setText(text);
        emailSender.send(message);
        ...
    }
}

누가, 누구에게, 제목을, 내용을 메세지에 담아서 이메일 샌더로 보내는 단순한 구조입니다.

4.2 첨부자료가 추가된 메일 보내기
심플 메일이 아니라 첨부파일 메일을 보내고 싶다면 자바메일 라이브러리의 MIME multipart 메세지를 심플메일메세지 대신 써야합니다.

스프링은 org.springframework.mail.javamail.MimeMessageHelper class 로 자바 메일 라이브러리를 제공합니다.

다음은 예제 소스 입니다.

@Override
public void sendMessageWithAttachment(
  String to, String subject, String text, String pathToAttachment) {
    // ...
    
    MimeMessage message = emailSender.createMimeMessage();
     
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    
    helper.setFrom("noreply@baeldung.com");
    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(text);
        
    FileSystemResource file 
      = new FileSystemResource(new File(pathToAttachment));
    helper.addAttachment("Invoice", file);

    emailSender.send(message);
    // ...
}

4.3 간단한 이메일 템플릿
SimpleMailMessage 클래스는 텍스트 포맷팅을 지원합니다. 우리는 이메일을 위한 템플릿을 빈 설정을 통해 만들 수 있습니다.

@Bean
public SimpleMailMessage templateSimpleMessage() {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setText(
      "This is the test email template for your email:\n%s\n");
    return message;
}

이제 이 템플릿으로 언제든 메일을 쉽게 보낼 수 있습니다.

@Autowired
public SimpleMailMessage template;
...
String text = String.format(template.getText(), templateArgs);  
sendSimpleMessage(to, subject, text);

출처 : https://www.baeldung.com/spring-email

1개의 댓글

comment-user-thumbnail
2022년 9월 2일

헐 이거 꿀팁이네요. 기억해둬야지. 감사해요!!

답글 달기