깃에 올려놓음
구글 계정의 보안에 들어가서 2단계 인증을 한다.
(나는 다해서 저렇게 뜸)
비밀번호를 입력해서 2단계 인증 ON을 해준다.
다시 보안으로 돌아와 앱 비밀번호를 생성해준다.
기타로 설정하고
기기를 SMTP로 해준다.
기기용 앱 비밀번호가 생성된다. 이 번호를 application.proerties에 사용한다.
mail패키지를 만들어준다.
gmail에서 보낼 수 있는 java파일을 만든다.
(주석을 참고)
package ch16;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.catalina.ssi.SSICommand;
public class GmailSend {
private static class SMTPAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
//앱 생성한 구글계정입력, 생성해서 얻은 비밀번호 입력
return new PasswordAuthentication("miliseo38@gmail.com", "rlciaujmnrwbjaqp");
}
}
public static void send(String title, String content, String toEmail) {
Properties p = new Properties();
p.put("mail.smtp.starttls.enable", "true");
// 이메일 발송을 처리해줄 SMTP서버
p.put("mail.smtp.host", "smtp.gmail.com");
// SMTP 서버의 인증을 사용한다는 의미
p.put("mail.smtp.auth", "true");
// TLS의 포트번호는 587이며 SSL의 포트번호는 465이다.
p.put("mail.smtp.port", "587");
// soket문제와 protocol문제 해결
p.put("mail.smtp.ssl.trust", "smtp.gmail.com");
p.put("mail.smtp.socketFactory.fallback", "false");
p.put("mail.smtp.ssl.protocols", "TLSv1.2");
try {
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(p, auth);
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
String message = content;
msg.setSubject(title);
Address fromAddr = new InternetAddress("miliseo38@gmail.com");//생성한 계정
msg.setFrom(fromAddr);
Address toAddr = new InternetAddress(toEmail);
msg.addRecipient(Message.RecipientType.TO, toAddr);
msg.setContent(message, "text/html;charset=KSC5601");
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String title = "제목 테스트1";
String content = "내용 테스트2";
String toEmail = "c81235@naver.com";//받는 이메일 주소
GmailSend.send(title, content, toEmail);
System.out.println("성공~~~~~~");
}
}
실행하면 아래와 같이 콘솔이 뜨고
메일을 답장 받는 주소로 들어가면 보내져 있는 것을 볼 수 있다.
mail패키지 안에 mgr을 넣어준다.
Mgr이랑 같은 역할을 한다.
(메일 Mgr이라고 보면 됨)
package mail;
public class MailSend {
public boolean sendPwd(String id, String email) {
boolean flag = false;
MemberMgr mgr = new MemberMgr();
String pwd = mgr.findPwd(id, email);
if(pwd!=null) {
String title = "OOO.com에서 id와 pwd를 전송합니다.";
String content = "id / pwd : " + id + "/" + pwd;
GmailSend.send(title, content, email);
flag = true;
}
return flag;
}
}
webapp폴더 아래에 mail폴더를 만들어주고 그 안에 만든다.
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
<title>JSP Email</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFCC">
<div align="center">
<br/><br/>
<table width="400" cellpadding="3">
<tr>
<td bgcolor="#FF3412" height="25" align="center">비밀번호 찾기</td>
</tr>
</table>
<br/>
<form name="postFrm" method="post" action="mailSendProc.jsp" >
<table width="400" cellpadding="3" align="center">
<tr>
<td align=center>
<table align="center">
<tr>
<td width="10%">id</td>
<td width="90%">
<input name="id" size="10" maxlength="8"></td>
</tr>
<tr>
<td>이메일</td>
<td>
<input name="email" size="30" maxlength="30"></td>
</tr>
<tr>
<td colspan="2"><hr/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="SEND">
<input type="reset" value="다시쓰기">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
실행하면 다음과 같은 화면이 출력된다.
<!-- mailSendProc.jsp -->
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="msend" class="mail.MailSend"/>
<%
//전송 성공 및 실패 -> mailSend.jsp응답
String id = request.getParameter("id");
String email = request.getParameter("email");
boolean result = msend.sendPwd(id, email);
String msg = "전송실패";
if(result){
msg = "전송성공";
}
%>
<script>
alert("<%=msg%>");
location.href = "mailSend.jsp";
</script>
DB에 들어가 email주소를 바꿔놔준다.
(앱 생성한 계정으로)
mailSend.jsp를 실행해 DB에 저장된 아이디와 이메일 주소를 입력해준다.
성공이라는 알림창과 함께 메일이 들어온 것을 볼 수 있다.