사용환경 및 언어: 이클립스, sts, spring4, oracle11
1. pom.xml에 dependency 추가
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
2. root-context 에 빈 등록, 하기 전에 먼저 mail과 mailsender 먼저 만들어야 에러가 나지 않는다. 4번 먼저 !!
<!-- 메일 보내기 -->
<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="보내는 이메일주소" />
<property name="password" value="비밀번호" />
<!-- email 요청시는 SMTP -->
<property name="javaMailProperties">
<props>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.debug">true</prop>
</props>
</property>
</bean>
</bean>
<bean id="email" class="패키지 주소 .Email">
</bean>
<bean id="emailSender" class="패키지 주소.EmailSender">
</bean>
3.비밀번호 찾기의 대략적인 프로세스는 이메일과 비밀번호 질문, 힌트를 입력 받은 다음 컨트롤러에서 임시 비밀번호 생성-> 이메일, 비밀번호질문, 힌트가 맞다면 mapper 에서 임시 비밀번호로 재설정->session에 값 저장->이메일 전달
4. mail과 mailsender 만들어준다. 2번 하기 전에 해야한다.
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;
}
}
public class EmailSender {
@Autowired
protected JavaMailSender mailSender;
public void SendEmail(Email email) throws Exception {
MimeMessage msg = mailSender.createMimeMessage();
System.out.println("****메일센더 ??");
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();
}
}
}
5. Controller
위에는 새로운 비밀번호를 만들어 주는 컨트롤러이고 밑에는 이메일을 전송해주는 컨트롤러이다.
@Autowired
private EmailSender emailSender;
@Autowired
private Email email;
// 새로운 비밀번호가 생성된다.
@RequestMapping("/newPassword")
public String newPassword(@Valid MemberVO memberVO, HttpSession session) throws Exception {
Random r = new Random();
int num = r.nextInt(89999) + 10000;
String npassword = "bapsi" + Integer.toString(num);// 새로운 비밀번호 변경
memberVO.setPassword(npassword);
session.setAttribute("memberVO", memberVO);
memberService.newPassword(memberVO);
return "/findPassword";
}
// 이메일로 비밀번호가 전송이된다.
@RequestMapping("/findPassword")
public String findPasswordOK(MemberVO memberVO, HttpSession session) throws Exception {
memberVO = (MemberVO) session.getAttribute("memberVO")
email.setContent("새로운 비밀번호 " + memberVO.getPassword() + " 입니다. );
email.setReceiver(memberVO.getEmail());
email.setSubject("안녕하세요"+memberVO.getEmail() +"님 재설정된 비밀번호를 확인해주세요");
emailSender.SendEmail(email);
System.out.println(email);
session.invalidate();
return "login";
6. 서비스, DAO 만들어준다.
1)Service
public void newPassword(MemberVO memberVO) throws Exception;
2)ServiceImpl
@Override
public void newPassword(MemberVO memebrVO) throws Exception {
memberDAO.newPassword(memebrVO);
}
3)DAO는 Service와 같다.
public void newPassword(MemberVO memberVO) throws Exception;
4)DAOImpl
@Override
public void newPassword(MemberVO member) {
String password = member.getPassword();
member.setPassword(password);
sqlSession.update("newPassword", member);
}
7.mapper에서 정보가 맞으면 비밀번호를 변경하는 내용을 만들어준다.
<update id="newPassword" parameterType="MemberVO">
update ruser_t
set password = #{password}
where email=#{email} and hintq=#{hintq} and hinta=#{hinta}
</update>
개발을 시작하는 초보자 입니다. 혹시 더 좋은 코드나 개선 할 점이 있다면 언제든지 댓글 남겨주세요 !!
'프로그래밍 > Spring' 카테고리의 다른 글
스프링 프레임워크(sts)와 Mariadb HikariCp 이클립스에서 연결하기 (0) | 2019.04.29 |
---|---|
Mac 맥에서 이클립스 Lombok 설치 (0) | 2019.04.28 |
스프링 이메일 보내기 (0) | 2018.10.22 |
@ResponseBody (0) | 2018.10.19 |
404 에러가 뜰 때 해결한 방법 (0) | 2018.10.19 |