Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] 메일 전송 api #67

Merged
merged 1 commit into from
Jul 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,19 @@
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;
import org.springframework.transaction.annotation.Transactional;
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;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.Nunbody.domain.Mail.dto.resquest;

public record EmailReqDto(
String mail,
String header,
String body
) {
}
18 changes: 18 additions & 0 deletions src/main/java/com/Nunbody/domain/Mail/service/EmailService.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
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;
import org.springframework.data.web.PageableDefault;
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
@RequestMapping("/api/mail")
public class MailController {
private final MailService mailService;
private final MailManageService mailManageService;
private final EmailService emailService;

@GetMapping("/mails")
public ResponseEntity<SuccessResponse<?>> getMail(@MemberId Long memberId, @RequestParam String type) {
Expand All @@ -39,6 +40,11 @@ public ResponseEntity<SuccessResponse<?>> getHeader(@MemberId Long memberId, @Re
final Page<MailResponseDto> mailListResponseDtoList = mailManageService.getMailList(memberId, type, pageable);
return SuccessResponse.ok(mailListResponseDtoList);
}
@PostMapping("/send")
public ResponseEntity<SuccessResponse<?>> mailSend(@RequestBody EmailReqDto emailReqDto) {
emailService.sendMail(emailReqDto);
return SuccessResponse.ok(null);
}

@PostMapping("/validate")
public ResponseEntity<SuccessResponse<?>> validate(@RequestBody ValidateRequestDto validateRequestDto) throws MessagingException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
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;
import org.springframework.data.domain.Pageable;
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;
Expand Down
11 changes: 5 additions & 6 deletions src/main/java/com/Nunbody/domain/mail/service/MailService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/com/Nunbody/external/GmailClient.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Loading