smtp 서버를 활용하여 스프링 이메일보내기
사용자가 이메일을 보내면 , 내가 받을 수 있도록 만드는 스프링 프로젝트를 만들어보았다.
프레임워크: 마이바티스
1.smtp 셋팅하기
application.properties
#email settings
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=내가 받을 이메일 주소
spring.mail.password=내 이메일 주소 비번
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.required=true
그리고 .gitignore에 application.properties를 추가해준다. 내가 적은 이메일과 주소가 다 보이기 때문이다.
src/main/resources/application.properties
//이메일 의존성
implementation 'org.springframework.boot:spring-boot-starter-mail'
2.이메일 보여주는 화면 만들기
controller
@Controller
public class EmailController{
private final MailService mailService
//단순 이메일 보여주는 화면
@GetMapping("/mail")
public String disMail(){
return "mail";
}
//이메일 제출시 데이터 전송 구간
@PostMapping("/mail")
public String execMail(MailVO mailVO){
mailService.mailSend(mailVO);
return "redirect:/mail/success";
}
@GetMapping("mail/success")
public String successMail(){
return "mailSent";
}
}
3.이메일 객체 만들기
MailVO 만들어주기
@Getter
@Setter
@NoArgsConstructor
public class MailVO{
private String address;
private String title;
private String message;
}
위에 @NoArgsConstructor는 new MailVO를 생성할 수 없게 한다. 따라서 다른 클라스에서 MailVO.getAddress이런식으로 가져올 수 있음
4.이메일 내가 받을 수 있도록 만드는 로직
service
@Service
@AllArgsConstructor
public class MailService{
private JavaMailSender mailSender;
private static final String My_addresss = "내가 받을 이메일 주소";
public void mainSend(MailVO mailVO){
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(MailService.my_address); // 정보를 받을 사람 , 수신자 즉,나
message.setFfrom(mailVO.getAddress()); // form에 사용자가 적은 이메일
message.setSubject(mailVO.getTitle());
message.setText(mailVO.getMessage());
mailSender.send(message);
}
}
5.메일 템플렛 만들기
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>메일 발송</title>
</head>
<body>
<h1>메일 발송</h1>
<form th:action="@{/mail}" method="post">
<input name="address" placeholder="이메일 주소"> <br>
<input name="title" placeholder="제목"> <br>
<textarea name="message" placeholder="메일 내용을 입력해주세요." cols="60" rows="20">
</textarea>
<button>발송</button>
</form>
</body>
</html>
form th:action = "@{/mail}" 이 부분은 controller에 폼 제출시 포스트방식으로 데이터 전송하기 위해 만든 부분이다.
발송 성공시 템플릿
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>메일 발송완료</title>
</head>
<body>
<h1>메일 발송 완료</h1>
<p>이메일을 다시 전송하고 싶다면 이 버튼을 클릭해주세요 ! </p>
<button><a href="/mail" >버튼</a></button>
</body>
</html>
출처 : https://salitha94.blogspot.com/2019/01/send-emails-via-localhost-with-springboot.html?
Send emails via localhost with Spring Boot (Java)
How to send emails using Spring Boot through localhost.
salitha94.blogspot.com
[SpringBoot] 이메일 전송 ( JavaMailSender, MimeMessageHelper ) (tistory.com)
[SpringBoot] 이메일 전송 ( JavaMailSender, MimeMessageHelper )
이번 글에서는 MailSender 인터페이스를 상속받은 JavaMailSender를 사용하여 이메일 전송 시스템을 구현해보도록 하겠습니다. 전체 코드는 깃헙을 참고하시길 바랍니다. 개발환경 IntelliJ 2019.02 Java 11
victorydntmd.tistory.com
++ 구글 계정 보안관련 에러가 자주 일어난다.
Username and Password not accepted.
에러가 계속 발생함
1.구글 계정 본인 인증을 해본다 - > 그래도 안됌
2.보안 수준이 낮은 앱의 엑세스를 허용해준다.
로그인 - Google 계정
하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인
accounts.google.com
3.그래도 에러남. 요즘에는 저거 플러스 이메일에서 또 인증 확인했다고 확인 눌러야 접근할 수 있다.