SPRING EMAIL 보내기 기능(비번찾기메일)
테스트용 아이디가 인증이 안되서 계속 삽질했네요 ㅠㅠ
아이디를 바꾸니 바로 메일이 날라옵니당.
일단 maven에 add dependency부터 해야됩니다.
pom.xml파일에 마우스 우클릭으로 add dependency 해서 "mail"을 적어서 찾기해도 됩니다.
아래와 같이 추가해줘도 됩니다.
1 2 3 4 5 6 | <!-- java mail --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> | cs |
src폴더 밑에 email용 패키지를 만들어 줍니다.
그리고 파일 2개보이시죠?
Email.java는 setter와 getter이고, EmailSender.java는 실제로 Email을 보내기 위한 sender입니다.
먼저 Email.java를 보시죠.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class Email { private String subject; private String content; private String receiver; public String getReceiver() { return receiver; } public void setReceiver(String receiver) { this.receiver = receiver; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } | cs |
보시는 바와같이 제목, 내용, 받는사람의 정보를 set하고 get하는 부분입니다.
그리고 EmailSender.java를 보시죠.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import javax.mail.MessagingException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.MailException; import org.springframework.mail.javamail.JavaMailSender; public class EmailSender { @Autowired protected JavaMailSender mailSender; public void SendEmail(Email email) throws Exception { MimeMessage msg = mailSender.createMimeMessage(); try { msg.setSubject(email.getSubject()); msg.setText(email.getContent()); msg.setRecipients(MimeMessage.RecipientType.TO , InternetAddress.parse(email.getReceiver())); }catch(MessagingException e) { System.out.println("MessagingException"); e.printStackTrace(); } try { mailSender.send(msg); }catch(MailException e) { System.out.println("MailException발생"); e.printStackTrace(); } } } | cs |
보시는 봐와같이 Email.java에서 정보를 get해서 보내주는 역할을 합니다.
그리고 JavaMailSender를 Autowired한걸 보실 수 있습니다.
이건 나중에~
이제 Controller쪽 보실께요~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @Autowired private EmailSender emailSender; @Autowired private Email email; @RequestMapping("/sendpw.do") public ModelAndView sendEmailAction (@RequestParam Map<String, Object> paramMap, ModelMap model) throws Exception { ModelAndView mav; String id=(String) paramMap.get("id"); String e_mail=(String) paramMap.get("email"); String pw=mainService.getPw(paramMap); System.out.println(pw); if(pw!=null) { email.setContent("비밀번호는 "+pw+" 입니다."); email.setReceiver(e_mail); email.setSubject(id+"님 비밀번호 찾기 메일입니다."); emailSender.SendEmail(email); mav= new ModelAndView("redirect:/login.do"); return mav; }else { mav=new ModelAndView("redirect:/logout.do"); return mav; } } | cs |
이건 앞의 비번찾기쪽에서 id와 email을 넘겨주면 그 정보를 가지고 db에서 일치하는지를 먼저 검색합니다.
그리고 맞다면 Email.java에 메일 제목과 내용, 받는사람을 set하는 역할을 합니다.
만약 일치하는 정보가 없다면 logout페이지를 보여주는데, 이건 아직 작업전이라~ㅎ
이제 bean 설정을 볼께요.~
bean은 메인으로 사용하는 context.xml에 추가 했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <!-- gmail --> <bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" > <property name="host" value="smtp.gmail.com" /> <property name="port" value="587" /> <property name="defaultEncoding" value="utf-8"/> <property name="username" value="your id@gmail.com" /> <property name="password" value="your password" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.starttls.enable">true</prop> <prop key="mail.smtp.auth">true</prop> </props> </property> </bean> <bean id="email" class="spring.board.email.Email"> </bean> <bean id="emailSender" class="spring.board.email.EmailSender"> </bean> | cs |
EmailSender에서 JavaMailSender가 있었죠?
mailSender는 JavaMailSender를 사용하기 위한 bean입니다.
아래 설정을 보면 host로는 gmaild의 smtp프로토콜을 사용하였고,
tls방식의 587번포트 그리고 username은 아이디, password는 비번입니다.
Gmail 자세한 설정은 요기서 보세용.
그리 밑에 있는 email과 emailSender bean은 컨트롤러에서 autowired로 사용하기에 등록했습니다.
이제 실행모습입니다.
저는 위와같이 링크로 만들었습니다.
링크를 클릭하면~
아이디와 등록할때 적었던 이메일을 물어봅니다.
입력하고 버튼을 누릅니다.
메일이 도착했군요~
클릭해보면~
이렇게 비번을 알려줍니다.
contents와 subject는 위 컨트롤러쪽 코드에서 이미 만들어 놨던 겁니다.
만약 없는 메일을 적으면 어떻게 될까요?
실험해보니~보내는 메일 계정으로 메일이 날라오네요.
없는 사용자라고 나옵니다.^^
이렇게 비번 메일로 찾는 방법은 끝냈네요.
이걸 응용하면 가입할때 이메일로 인증하는 것도 할 수 있겠네요^^