23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
... 생략 <!-- SpringBoot mail --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- SpringBoot mail --> ... 생략
aws.ses.from=baekido@gmail.com ... 생략 # spring boot mail spring.mail.protocol=smtp spring.mail.host=email-smtp.ap-northeast-2.amazonaws.com spring.mail.port=587 spring.mail.default-encoding=UTF-8 spring.mail.username=AXXXXXXXYYYYYZZZZZY spring.mail.password=BEslkfjsldkfjaldkfjlwkfjldjkslkjvlskdbW # Other smtp properties spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.connectiontimeout=5000 spring.mail.properties.mail.smtp.timeout=5000 spring.mail.properties.mail.smtp.writetimeout=5000 # TLS port 587 spring.mail.properties.mail.smtp.starttls.enable=true ... 생략
spring.mail.protocol 프로토콜은 smtp 이다.spring.mail.host host 파일은 ses를 생성한 리젼의 ses 엔드포인트를 작성한다. ses 메인 대시보드에서 아래와 같이 확인할 수 있다.spring.mail.port 기본적으로 TLS를 이용해야하며, ses 메인 대시보드에서 확인한 값을 작성하면 된다. (위 이미지 참조)spring.mail.default-encoding 디플토 인코딩 값을 지정한다.spring.mail.username 계정 생성은 AWS Console 에서 다음과 같이 생성할 수 있다. Credential생성 참조spring.mail.password 계정 생성은 AWS Console 에서 다음과 같이 생성할 수 있다. Credential생성 참조spring.mail.properties.mail.smtp.auth smtp 인증을 이용할 것인지 지정한다. (true로 지정하였다.)spring.mail.properties.mail.smtp.connectiontimeout 서버에 접속할 커넥션 타임아웃을 5초로 잡았다. 이 값은 어플리케이션의 특성에 맞게 적절히 잡아주자.spring.mail.properties.mail.smtp.timeout smtp 전송후 결과까지 타임아웃을 지정한다.spring.mail.properties.mail.smtp.writetimeout smtp 에 컨텐츠를 작성하기 까지 타임아웃을 지정한다.spring.mail.properties.mail.smtp.starttls.enable TLS 적용 여부를 설정한다. true를 지정하였다.
package com.schooldevops.aws.mail.smtp.dtos;
public class MailDTO {
private String to;
private String subject;
private String message;
private boolean isHTML;
private String attachFile;
private String attachFilePath;
public MailDTO() {
}
public MailDTO(String to, String subject, String message, boolean isHTML, String attachFile, String attachFilePath) {
this.to = to;
this.subject = subject;
this.message = message;
this.isHTML = isHTML;
this.attachFile = attachFile;
this.attachFilePath = attachFilePath;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isHTML() {
return isHTML;
}
public void setHTML(boolean HTML) {
isHTML = HTML;
}
public String getAttachFile() {
return attachFile;
}
public void setAttachFile(String attachFile) {
this.attachFile = attachFile;
}
public String getAttachFilePath() {
return attachFilePath;
}
public void setAttachFilePath(String attachFilePath) {
this.attachFilePath = attachFilePath;
}
}
package com.schooldevops.aws.mail.smtp.services;
import com.schooldevops.aws.mail.smtp.dtos.MailDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@Service
public class SmtpService {
@Value("${aws.ses.from}")
private String from;
private final JavaMailSender javaMailSender;
public SmtpService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
public void sendMail(MailDTO mail) {
if (mail != null && mail.getAttachFile() != null) {
sendMailWithAttachments(mail);
} else if (mail.isHTML()) {
sendMailWithHTML(mail);
} else {
sendMailJustText(mail);
}
}
/**
* 단순 텍스트 전송
* @param mail 전달할 메일 객체
*/
public void sendMailJustText(MailDTO mail) {
SimpleMailMessage msg = new SimpleMailMessage();
msg.setTo(mail.getTo(), mail.getTo());
msg.setSubject(mail.getSubject());
msg.setText(mail.getMessage());
msg.setFrom("baekido@gmail.com");
javaMailSender.send(msg);
}
/**
* HTML 형태로 메일 전송
* @param mail 전달할 메일 객체
*/
public void sendMailWithHTML(MailDTO mail){
try {
MimeMessage msg = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setTo(mail.getTo());
helper.setSubject(mail.getSubject());
helper.setText(mail.getMessage(), mail.isHTML());
javaMailSender.send(msg);
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
* 첨부 파일이 존재하는 메일 전송
* @param mail 전달할 메일 객체
*/
public void sendMailWithAttachments(MailDTO mail){
try {
MimeMessage msg = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setTo(mail.getTo());
helper.setSubject(mail.getSubject());
helper.setText(mail.getMessage(), mail.isHTML());
helper.addAttachment(mail.getAttachFile(), new ClassPathResource(mail.getAttachFilePath()));
javaMailSender.send(msg);
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.