Spring/[Spring]Email(이메일보내기)

smtp 서버를 활용하여 스프링 이메일보내기

Ms.Pudding 2022. 1. 11. 00:20

사용자가 이메일을 보내면 , 내가 받을 수 있도록 만드는 스프링 프로젝트를 만들어보았다.

프레임워크: 마이바티스

 

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.보안 수준이 낮은 앱의 엑세스를 허용해준다.

https://myaccount.google.com/u/4/lesssecureapps?pli=1&rapt=AEjHL4Phl05Zl4EVPgX90z9sZkSGnXuvYxAwK9UEb6f9RDmAUJbPVOgscVcvx2sicwX5U5487X63nHHa8RphkzM_pCfgS_UfcQ 

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

 

3.그래도 에러남. 요즘에는 저거 플러스 이메일에서 또 인증 확인했다고 확인 눌러야 접근할 수 있다.