IT/development

[springBoot] daum SMTP ๋ฉ”์ผ ๋ฐœ์†ก

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2023. 8. 22.

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);
        }
}

ํ…Œ์ŠคํŠธ

๊ฐœ์ธ ์Šคํ„ฐ๋”” ๊ธฐ๋ก์„ ๋ฉ”๋ชจํ•˜๋Š” ๊ณต๊ฐ„์ด๋ผ ํ‹€๋ฆฐ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‹€๋ฆฐ ์  ์žˆ์„ ๊ฒฝ์šฐ ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋Œ“๊ธ€