From b6c711dbd0017e003cd91306bf91593cfa7e9eb3 Mon Sep 17 00:00:00 2001 From: qogustj Date: Tue, 2 Jul 2024 12:34:46 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20=EB=A9=94=EC=9D=BC=20=EC=A0=84?= =?UTF-8?q?=EC=86=A1=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 ++- .../Mail/controller/GmailController.java | 9 +++-- .../domain/Mail/dto/resquest/EmailReqDto.java | 8 ++++ .../domain/Mail/service/EmailService.java | 18 +++++++++ .../mail/controller/MailController.java | 14 +++++-- .../mail/service/MailManageService.java | 2 +- .../domain/mail/service/MailService.java | 11 +++--- .../com/Nunbody/external/GmailClient.java | 37 +++++++++++++++++++ 8 files changed, 89 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/Nunbody/domain/Mail/dto/resquest/EmailReqDto.java create mode 100644 src/main/java/com/Nunbody/domain/Mail/service/EmailService.java create mode 100644 src/main/java/com/Nunbody/external/GmailClient.java diff --git a/build.gradle b/build.gradle index 9cfc458..884b726 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' //email(javax) - implementation 'com.sun.mail:javax.mail:1.6.2' +// implementation 'com.sun.mail:javax.mail:1.6.2' //DB gradle runtimeOnly 'com.mysql:mysql-connector-j' @@ -51,6 +51,9 @@ dependencies { //jsoup implementation 'org.jsoup:jsoup:1.17.1' + + //email + implementation 'org.springframework.boot:spring-boot-starter-mail' } tasks.named('test') { diff --git a/src/main/java/com/Nunbody/domain/Mail/controller/GmailController.java b/src/main/java/com/Nunbody/domain/Mail/controller/GmailController.java index 7807793..2cbff66 100644 --- a/src/main/java/com/Nunbody/domain/Mail/controller/GmailController.java +++ b/src/main/java/com/Nunbody/domain/Mail/controller/GmailController.java @@ -6,6 +6,9 @@ import com.Nunbody.domain.Mail.repository.MailBodyRepository; import com.Nunbody.domain.Mail.repository.MailRepository; import com.Nunbody.domain.member.repository.MemberRepository; +import jakarta.mail.*; +import jakarta.mail.internet.MimeMultipart; +import jakarta.mail.internet.MimeUtility; import lombok.RequiredArgsConstructor; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.http.ResponseEntity; @@ -13,9 +16,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import javax.mail.*; -import javax.mail.internet.MimeMultipart; -import javax.mail.internet.MimeUtility; +//import javax.mail.*; +//import javax.mail.internet.MimeMultipart; +//import javax.mail.internet.MimeUtility; import java.io.IOException; import java.time.LocalDateTime; import java.time.ZoneId; diff --git a/src/main/java/com/Nunbody/domain/Mail/dto/resquest/EmailReqDto.java b/src/main/java/com/Nunbody/domain/Mail/dto/resquest/EmailReqDto.java new file mode 100644 index 0000000..f77cc2e --- /dev/null +++ b/src/main/java/com/Nunbody/domain/Mail/dto/resquest/EmailReqDto.java @@ -0,0 +1,8 @@ +package com.Nunbody.domain.Mail.dto.resquest; + +public record EmailReqDto( + String mail, + String header, + String body +) { +} diff --git a/src/main/java/com/Nunbody/domain/Mail/service/EmailService.java b/src/main/java/com/Nunbody/domain/Mail/service/EmailService.java new file mode 100644 index 0000000..251a63d --- /dev/null +++ b/src/main/java/com/Nunbody/domain/Mail/service/EmailService.java @@ -0,0 +1,18 @@ +package com.Nunbody.domain.Mail.service; + +import com.Nunbody.domain.Mail.dto.resquest.EmailReqDto; +import com.Nunbody.external.GmailClient; +import jakarta.mail.internet.MimeMessage; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class EmailService { + private final GmailClient gmailClient; + + public void sendMail(EmailReqDto emailReqDto) { + MimeMessage message = gmailClient.CreateMail(emailReqDto); + gmailClient.send(message); + } +} diff --git a/src/main/java/com/Nunbody/domain/mail/controller/MailController.java b/src/main/java/com/Nunbody/domain/mail/controller/MailController.java index 26d1ce8..c9a388a 100644 --- a/src/main/java/com/Nunbody/domain/mail/controller/MailController.java +++ b/src/main/java/com/Nunbody/domain/mail/controller/MailController.java @@ -1,14 +1,15 @@ package com.Nunbody.domain.Mail.controller; -import com.Nunbody.domain.Mail.domain.MailList; -import com.Nunbody.domain.Mail.domain.PlatformType; import com.Nunbody.domain.Mail.dto.response.MailDetailResponseDto; import com.Nunbody.domain.Mail.dto.response.MailResponseDto; +import com.Nunbody.domain.Mail.dto.resquest.EmailReqDto; import com.Nunbody.domain.Mail.dto.resquest.ValidateRequestDto; +import com.Nunbody.domain.Mail.service.EmailService; import com.Nunbody.domain.Mail.service.MailManageService; import com.Nunbody.domain.Mail.service.MailService; import com.Nunbody.global.common.SuccessResponse; import com.Nunbody.global.config.auth.MemberId; +import jakarta.mail.MessagingException; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -16,9 +17,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import javax.mail.MessagingException; -import static com.Nunbody.domain.Mail.domain.PlatformType.NAVER; + @RequiredArgsConstructor @RestController @@ -26,6 +26,7 @@ public class MailController { private final MailService mailService; private final MailManageService mailManageService; + private final EmailService emailService; @GetMapping("/mails") public ResponseEntity> getMail(@MemberId Long memberId, @RequestParam String type) { @@ -39,6 +40,11 @@ public ResponseEntity> getHeader(@MemberId Long memberId, @Re final Page mailListResponseDtoList = mailManageService.getMailList(memberId, type, pageable); return SuccessResponse.ok(mailListResponseDtoList); } + @PostMapping("/send") + public ResponseEntity> mailSend(@RequestBody EmailReqDto emailReqDto) { + emailService.sendMail(emailReqDto); + return SuccessResponse.ok(null); + } @PostMapping("/validate") public ResponseEntity> validate(@RequestBody ValidateRequestDto validateRequestDto) throws MessagingException { diff --git a/src/main/java/com/Nunbody/domain/mail/service/MailManageService.java b/src/main/java/com/Nunbody/domain/mail/service/MailManageService.java index 2ec67cd..d399779 100644 --- a/src/main/java/com/Nunbody/domain/mail/service/MailManageService.java +++ b/src/main/java/com/Nunbody/domain/mail/service/MailManageService.java @@ -9,6 +9,7 @@ import com.Nunbody.domain.member.domain.Member; import com.Nunbody.domain.member.repository.MemberRepository; import com.Nunbody.global.error.exception.InvalidValueException; +import jakarta.mail.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -16,7 +17,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.mail.*; import java.util.Properties; import static com.Nunbody.global.error.ErrorCode.IMAP_ERROR; diff --git a/src/main/java/com/Nunbody/domain/mail/service/MailService.java b/src/main/java/com/Nunbody/domain/mail/service/MailService.java index bdaa58c..eb7f86f 100644 --- a/src/main/java/com/Nunbody/domain/mail/service/MailService.java +++ b/src/main/java/com/Nunbody/domain/mail/service/MailService.java @@ -11,21 +11,20 @@ import com.Nunbody.domain.member.domain.Member; import com.Nunbody.domain.member.repository.MemberRepository; import com.Nunbody.global.common.EncoderDecoder; -import com.sun.mail.util.BASE64DecoderStream; + +import jakarta.mail.*; +import jakarta.mail.internet.MimeUtility; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.mail.*; -import javax.mail.internet.MimeMultipart; -import javax.mail.internet.MimeUtility; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.time.Instant; + import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; diff --git a/src/main/java/com/Nunbody/external/GmailClient.java b/src/main/java/com/Nunbody/external/GmailClient.java new file mode 100644 index 0000000..43983c1 --- /dev/null +++ b/src/main/java/com/Nunbody/external/GmailClient.java @@ -0,0 +1,37 @@ +package com.Nunbody.external; + +import com.Nunbody.domain.Mail.dto.resquest.EmailReqDto; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Service; + +@Service +public class GmailClient { + private final JavaMailSender javaMailSender; + @Value("${spring.mail.username}") + private String senderEmail; + + public GmailClient(JavaMailSender javaMailSender) { + this.javaMailSender = javaMailSender; + } + + public MimeMessage CreateMail(EmailReqDto emailReqDto) { + MimeMessage message = javaMailSender.createMimeMessage(); + + try { + message.setFrom(senderEmail); + message.setRecipients(MimeMessage.RecipientType.TO, emailReqDto.mail()); + message.setSubject(emailReqDto.header()); + message.setText(emailReqDto.body(),"UTF-8", "html"); + } catch (MessagingException e) { + throw new RuntimeException(e); + } + + return message; + } + public void send(MimeMessage message){ + javaMailSender.send(message); + } +}