반응형
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);
}
}
테스트
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
반응형
'IT > development' 카테고리의 다른 글
[springBoot] 엑셀파일 읽기(feat. ajax) (62) | 2023.08.23 |
---|---|
[Java] 가변인자 사용(feat. String ... str) (37) | 2023.08.22 |
[github] github 웹 vs code 사용 (0) | 2023.08.17 |
[Vue.js] Vue.js 첨부파일 업로드 (0) | 2023.08.13 |
[JavaScript] 템플릿 문자열 사용법(feat. '(백틱)) (2) | 2023.08.13 |