일어나면 작성 할 예정이다.

implementation 'org.springframework.boot:spring-boot-starter-mail'
스타터 편집으로 사진과 같이 Java mail Sender을 추가 해주거나
위의 코드를 그래들에 직접 적어 주는 방식으로
Java Mail Sender을 추가를 해준다.
mail:
host: smtp.gmail.com
port: 587
username: // 이메일
password: //비밀번호
properties:
mail:
smtp:
auth: true
starttls:
enable: true
yml은 spring의 하위 레벨로 만들어주면 된다.
@Slf4j
@Service
@Transactional
@RequiredArgsConstructor
public class SendEmailServiceImpl implements SendEmailService {
//JavaMailSender 의존성을 추가해준다.
private final JavaMailSender mailSender;
//필자는 member을 조회해서 보내야 함으로 member서비스 또한 추가를 해줬다.
private final MemberService memberService;
// 이메일 발신자 주소를 yml에서 주입받았다. (설정만 바꿔서 관리 할 수 있다.)
@Value("${custom.mail}")
private String sender;
// 이 부분은 팀에 가입하기를 눌렀을때 보내질 프론트엔드 페이지 주소이다.
// SMTP로 HTML 형식의 메일 본문을 구성할 수 있다
private String url = "http://localhost:3000/accept-invite";
@Override
public InviteMemberResponse sendInviteEmail(long teamId, long memberId) {
String inviter = memberService.getByMemberId(SecurityUtil.getCurrentMemberId()).getNickname();
Member member = memberService.findById(memberId).orElseThrow();
String receiverEmail = member.getEmail();
// 이 부분에서 메일 메시지 객체를 생성한다.
// 이후 MimeMessageHelper를 사용해 제목, 본문, 수신자 등의 내용을 설정할 수 있다.
MimeMessage message = mailSender.createMimeMessage();
try {
// MimeMessageHelper 객체를 생성한다.
MimeMessageHelper helper = new MimeMessageHelper(message, false, "UTF-8");
//보내는 사람을 설정한다
helper.setFrom(sender);
//받는 사람을 설정한다.
helper.setTo(receiverEmail);
//메일의 제목을 설정 해준다
helper.setSubject("[Accord] " + inviter + "님이 팀에 초대를 했습니다");
//메일의 본문을 추가 해준다.
//true를 넣어줘야지 html로 인식한다.
helper.setText("<h3>안녕하세요!</h3><p>"+inviter+"님이 초대를 하셨습니다</p>" +
"<a href='" + url + "/" + teamId + "' " +
"style='display: inline-block; padding: 10px 20px; font-size: 16px; color: white; " +
"background-color: #0078D7; text-decoration: none; border-radius: 5px;'>팀에 가입하기</a>",
true);
// 위에서 만들어진 메세지를 보낸다.
mailSender.send(message);
return InviteMemberResponse.builder()
.message("Success Send Email")
.result(true)
.build();
} catch (MessagingException e) {
throw new EmailSendException(ExceptionMessage.EMAIL_SENDING_ERROR);
}
}
}
위 코드는 필자가 실제로 작성한 예제이며, SendEmailService 인터페이스를 구현한 SendEmailServiceImpl 클래스를 기반으로 구성되었으나 반드시 이렇게 인터페이스를 구현해야 하는 것은 아니며, 단일 서비스 클래스로 작성해도 무방하다.
또한 필자는 InviteMemberResponse라는 dto를 통해서 builder패턴을 사용해 결과물을 보냈으나 굳이 이렇게 하지 않아도 된다.
혹시나 이것이 이해가 안되는 사람들은 더욱 간단하게 설명을 하자면 void로 반환을 해도 문제가 없다는 것이다.
@Service
@RequiredArgsConstructor
public class SendEmailService {
//JavaMailSender 의존성 주입
private final JavaMailSender mailSender;
//보내는 사람 이메일
private String sender = "sender@gmail.com";
//받는 사람 이메일
private String receiverEmail = "receiver@gmail.com";
public void sendInviteEmail() {
try {
// 이 부분에서 메일 메시지 객체를 생성한다.
// 이후 MimeMessageHelper를 사용해 제목, 본문, 수신자 등의 내용을 설정할 수 있다.
MimeMessage message = mailSender.createMimeMessage();
// MimeMessageHelper 객체를 생성한다.
MimeMessageHelper helper = new MimeMessageHelper(message, false, "UTF-8");
//보내는 사람을 설정한다
helper.setFrom(sender);
//받는 사람을 설정한다.
helper.setTo(receiverEmail);
//메일의 제목을 설정 해준다
helper.setSubject("메일 제목입니다.");
//메일의 본문을 추가 해준다.
//true를 넣어줘야지 html로 인식한다.
helper.setText("<h3>안녕하세요!</h3>", true);
// 위에서 만들어진 메세지를 보낸다.
mailSender.send(message);
} catch (MessagingException e) {
// 전송 중 예외 처리
e.printStackTrace();
}
}
}
이렇게만 해도 문제가 없다.
@Service
@RequiredArgsConstructor
혹시나 위의 어노테이션을 모른다면 따로 Lombok 어노테이션을 공부를 하면 좋을 듯하다.
나머지는 컨트롤러만 만들어주면 끝이다. 이 부분은 따로 설명을 하지는 않겠다.