diff --git a/src/main/java/com/Nunbody/domain/Kakao/controller/KakaoController.java b/src/main/java/com/Nunbody/domain/Kakao/controller/KakaoController.java index 6e7d2ad..a91309a 100644 --- a/src/main/java/com/Nunbody/domain/Kakao/controller/KakaoController.java +++ b/src/main/java/com/Nunbody/domain/Kakao/controller/KakaoController.java @@ -4,6 +4,7 @@ import com.Nunbody.global.common.SuccessResponse; import com.Nunbody.global.config.auth.MemberId; import com.fasterxml.jackson.core.JsonProcessingException; +import jakarta.mail.MessagingException; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -11,15 +12,17 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; + @RequiredArgsConstructor @RestController @RequestMapping("/api/kakao") public class KakaoController { private final MessageService messageService; @GetMapping("/send") - public ResponseEntity> sendMe(@RequestParam( name = "code") String code) throws JsonProcessingException { + public ResponseEntity> sendMe(@MemberId Long memberId, @RequestParam( name = "code") String code) throws IOException, MessagingException { - messageService.sendMyMessage(code); + messageService.sendMyMessage(memberId, code); return SuccessResponse.ok(null); } @GetMapping("/send/friend") diff --git a/src/main/java/com/Nunbody/domain/Kakao/service/MailScheduleService.java b/src/main/java/com/Nunbody/domain/Kakao/service/MailScheduleService.java index d1ebee6..9f3f7be 100644 --- a/src/main/java/com/Nunbody/domain/Kakao/service/MailScheduleService.java +++ b/src/main/java/com/Nunbody/domain/Kakao/service/MailScheduleService.java @@ -82,7 +82,7 @@ private String getMessageContent(Message message) throws MessagingException, IOE return "Unable to extract content"; } - private String getTextFromMultipart(Multipart multipart) throws MessagingException, IOException { + public String getTextFromMultipart(Multipart multipart) throws MessagingException, IOException { StringBuilder result = new StringBuilder(); int count = multipart.getCount(); for (int i = 0; i < count; i++) { diff --git a/src/main/java/com/Nunbody/domain/Kakao/service/MessageService.java b/src/main/java/com/Nunbody/domain/Kakao/service/MessageService.java index 2c1171a..eca2b46 100644 --- a/src/main/java/com/Nunbody/domain/Kakao/service/MessageService.java +++ b/src/main/java/com/Nunbody/domain/Kakao/service/MessageService.java @@ -2,10 +2,18 @@ import com.Nunbody.domain.Kakao.service.dto.DefaultMessageDto; import com.Nunbody.domain.Kakao.service.dto.Friend; +import com.Nunbody.domain.Mail.service.MailService; +import com.Nunbody.domain.member.domain.Member; +import com.Nunbody.domain.member.service.MemberReader; +import com.Nunbody.external.WindyfloMailClient; +import com.Nunbody.global.common.EncoderDecoder; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import jakarta.mail.*; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.io.IOException; import java.util.List; import java.util.Optional; @@ -13,11 +21,33 @@ @RequiredArgsConstructor public class MessageService { private final KakaoService kakaoService; - - public boolean sendMyMessage(String code) throws JsonProcessingException { + private final WindyfloMailClient windyfloMailClient; + private final MemberReader memberReader; + private final MailService mailService; + private final MailScheduleService mailScheduleService; + public boolean sendMyMessage(Long memberId, String code) throws IOException, MessagingException { String accessToken = kakaoService.getAuthToken(code); + Member member = memberReader.getMemberById(memberId); + Store store = mailService.connectToMailStore("imap.naver.com", member.getNaverId(), EncoderDecoder.decodeFromBase64(member.getNaverPassword())); - DefaultMessageDto myMsg = DefaultMessageDto.of("text", "emap 테스트","https://www.richam.site/login","https://www.richam.site/","자세히보기"); + Folder folder = store.getFolder("inbox"); + + folder.open(Folder.READ_ONLY); + + int lastMessageIndex = folder.getMessageCount(); // 가장 최근 메일의 인덱스 + Message message = folder.getMessage(lastMessageIndex); + Object object = message.getContent(); + + String st = ""; + if (object instanceof String) { + st = (String) object; + } else if (object instanceof Multipart) { + st = mailScheduleService.getTextFromMultipart((Multipart) message.getContent()); + } + + + JsonNode jsonNode = windyfloMailClient.summaryMail(st); + DefaultMessageDto myMsg = DefaultMessageDto.of("text", jsonNode.get("text").asText() +" 이메일이 도착했어요 확인해주세요","https://www.richam.site/login","https://www.richam.site/","메일 확인하러가기"); return kakaoService.sendMessage(accessToken, myMsg); } diff --git a/src/main/java/com/Nunbody/external/WindyfloMailClient.java b/src/main/java/com/Nunbody/external/WindyfloMailClient.java index 1ce230d..14e56d3 100644 --- a/src/main/java/com/Nunbody/external/WindyfloMailClient.java +++ b/src/main/java/com/Nunbody/external/WindyfloMailClient.java @@ -15,6 +15,8 @@ public class WindyfloMailClient { private final String FIND_MAIL_URL = "https://windyflo.com/api/v1/prediction/05d769b1-0a34-49c5-83d3-6b92c1d650f8"; private final String CREATE_MAIL_URL = "https://windyflo.com/api/v1/prediction/85b9eb4a-e94c-4e98-ab4f-ed805bba1220"; + private final String SUMMARY_MAIL_URL = "https://windyflo.com/api/v1/prediction/2f26c1c0-e096-4b47-975c-850e1483ae4b"; + private final RestTemplate restTemplate; public ConversationQARes findMailInVectorDB(String question) { @@ -36,4 +38,14 @@ public JsonNode createMail(String question) { JsonNode ss = restTemplate.postForObject(CREATE_MAIL_URL, request, JsonNode.class); return ss; } + public JsonNode summaryMail(String question) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + QuestionRequest requestBody = new QuestionRequest(question); + HttpEntity request = new HttpEntity<>(requestBody, headers); + + JsonNode ss = restTemplate.postForObject(SUMMARY_MAIL_URL, request, JsonNode.class); + return ss; + } }