IT/development

[springBoot] daum SMTP 메일 발송

알 수 없는 사용자 2023. 8. 22. 03:42
반응형

daum의 SMTP를 이용해서 메일 발송하는 예제

개발환경: springBoot 2.7.14, gradle

선행조건(daum smtp 활성화)

설정 > IAMP/POP3(저기의 정보를 프로퍼티에 기입)

의존성 추가(gradle)

implementation 'org.springframework.boot:spring-boot-starter-mail'

application.yml에 smtp 설정 추가

spring:
  mail:
    host: smtp.daum.net
    port: 465
    username: #송신메일주소(보내는 메일 주소)
    password: #송신메일 주소의 비밀번호(여기선 2차 인증 앱 비밀번호 입력함)
    properties: #tls 설정
      mail:
        smtp:
          auth: true
          ssl:
            enable: true

Vo

package com.example.testproject1.mail.model;

import lombok.Data;

@Data
public class MailVo {

    private String from;
    private String to;
    private String subject;
    private String content;
}

Service

package com.example.testproject1.mail.service;

import com.example.testproject1.mail.model.MailVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

@Service
@Slf4j
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class MailService {

    private final JavaMailSender mailSender;

    /**
     * 메일 발송
     * @param mailVo
     * @throws MessagingException
     */
    public void sendMail(MailVo mailVo) throws MessagingException {
		//단순한 텍스트 기반의 이메일 메시지를 생성하는 데 사용    		
    	//SimpleMailMessage message = new SimpleMailMessage();
    	
    	//Mime(Multi-purpose Internet Mail Extensions) 형식의 이메일을 생성하고 조작하는 데 사용
        //텍스트, HTML, 첨부 파일 및 다양한 멀티미디어 데이터를 포함할 수 있는 더 다양한 형식의 이메일을 지원
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);

        helper.setFrom(mailVo.getFrom());
        helper.setTo(mailVo.getTo());
        helper.setSubject(mailVo.getSubject());
        helper.setText(mailVo.getContent(), true);
        //첨부파일 추가 시 아래 예시처럼 파일명, 파일객체 추가
		helper.addAttachment(file.getOriginalFilename(), file);
        mailSender.send(message);
    }
    
    



}

RestController

원래는 POST로 보내야 하지만 예제니까 GET으로 호출함

package com.example.testproject1.mail.web;

import com.example.testproject1.mail.model.MailVo;
import com.example.testproject1.mail.service.MailService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.mail.MessagingException;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/api/mail")
public class MailRestController {

    private final MailService mailService;

    @GetMapping("/send")
        public ResponseEntity<Map<String, Object>> sendMail() throws MessagingException {
            Map<String, Object> resultMap = new HashMap<>();
            MailVo mailVo = new MailVo();
            mailVo.setFrom("송신 메일주소");
            mailVo.setTo("수신 메일 주소");
            mailVo.setSubject("springBoot로 daum의 SMTP로 보내는 이메일 테스트");
            mailVo.setContent("안녕하세요. 이 메일은 springBoot로 daum SMTP 이용해서 보내는 메일입니다.");

            mailService.sendMail(mailVo);
            resultMap.put("code", "success");
            return new ResponseEntity<>(resultMap, HttpStatus.OK);
        }
}

테스트

개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

틀린 점 있을 경우 댓글 부탁드립니다.

반응형