1. 메이븐 기반 프로젝트이므로 pom.xml에 javax.mail 디펜던시 추가
1
2
3
4
5
6
|
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
|
cs |
2. selectbox 선택부분
- jsp
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
33
34
35
|
<table class="table table-hover">
<colgroup>
<col width="5%"/>
<col width="5%"/>
<col width="10%"/>
<col width="10%"/>
<col width="40%"/>
<col width="10%"/>
<col width="20%"/>
</colgroup>
<thead>
<tr>
<th scope="col"><input type="checkbox" name="select_all" id="select_all" value="select_all"></th>
<th scope="col">No.</th>
<th scope="col">이름</th>
<th scope="col">아이디</th>
<th scope="col">주소</th>
<th scope="col">전화번호</th>
<th scope="col">이메일</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="list" varStatus="st">
<tr>
<td><input type="checkbox" name="select_tch" id="select_tch" value="${list.userno}"></td>
<td>${rowNo-st.index}</td>
<td>${list.name}</td>
<td>${list.userid}</td>
<td>${list.address}</td>
<td>${list.phone}</td>
<td>${list.email}</td>
</tr>
</c:forEach>
</tbody>
</table>
|
cs |
- javascript
맨 윗줄 checkbox를 체크하면 전체선택이 되도록, 한번더 누르면 전체선택이 해제되도록 설정
1
2
3
4
5
6
7
8
|
//전체선택 구현 (id=select_all을 누르면 모든 checkbox 타입의 input box의 checked를 true로 바꿔라)
$("#select_all").on("click",function(){
if($("input:checkbox[id = 'select_all']").prop("checked")){
$("input[type=checkbox]:not(:disabled)").prop("checked", true);
}else{
$("input[type=checkbox]:not(:disabled)").prop("checked", false);
}
});
|
cs |
교사 승인 버튼을 눌렀을 경우 체크박스의 value (user의 userno, email값)를 배열에 담고 json형태로 바꿔서 넘기기
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
|
//교사 승인 버튼을 눌렀을경우 체크박스의 value(user의 userno), email 값을 배열에 담고 json형태로 바꿔서 넘긴다.
$("#tchProveBtn").click(function(){
var checkbox = $("input[name='select_tch']:checked");
var jarr = [];
$(checkbox).each(function(i){
var tr = checkbox.parent().parent().eq(i);
var td = tr.children();
var userno = $(this).val(); //체크박스의 value값
var email = td.eq(6).text(); //0번째부터 시작이므로 마지막 줄의 td의 값
jarr.push({"userno": userno, "email": email}); //배열에 userno와 email을 담는다.
});
var jStr = JSON.stringify(jarr); //json형태 문자열로 바꾸기
if(jarr.length >= 1){
//json형태 data를 컨트롤러로 넘긴다. $.ajax({
url: "tchProve.do",
type: "post",
data: {
"jStr": jStr
},
success: function(val){
if(val>=1){
alert("교사 승인이 완료되었습니다.");
location.href="/mvnschool/tchWaitList_pre.do";
}
}
})
}
}); //tchProveBtn
|
cs |
userno는 dao에서 update를 하기 위해 필요한 값이고
email은 수신자 메일주소이다.
- Controller.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
//교사 승인 -> dao를 통해 role이 2로 업데이트되고, 해당회원의 이메일로 메일 발송
@RequestMapping(value="tchProve.do", method = RequestMethod.POST)
@ResponseBody
public int tchProve(@RequestParam(value="jStr") String jStr) throws AddressException, MessagingException{
int result = -1;
JSONArray jsonArr = new JSONArray(jStr);
//이메일 주소들을 List에 담는다. List<String> emailList = new ArrayList<>();
for(int i=0; i<jsonArr.length(); i++){
JSONObject jsonObject = jsonArr.getJSONObject(i);
String userno = (String) jsonObject.getString("userno");
String email = (String) jsonObject.getString("email");
emailList.add(email);
result = userDAO.tchProve(userno);
}
//이메일로 메일 발송
SendEmail.sendEmail(emailList);
return result;
}
|
cs |
JSONArray를 통해 받아온 jStr을 다시 JSON 배열 형태로 풀어준다.
그 배열의 크기만큼 반복문을 돌려서 JSONObject로 하나씩 뽑아낸다.
userno는 dao와 연결시키고,
email은 List에 담은 후 자바메일 발송을 위해 만들어놓은 클래스의 함수와 연결시킨다.
- dao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//교사 승인
public int tchProve(String userno){
Connection conn = null;
Statement st = null;
int result = 0;
try {
conn = getConnection();
String sql = "update user_haksa set role =2 where userno='"+userno+"'";
st = conn.createStatement();
result = st.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
} finally {
closeConnection(conn, st, null);
}
return result;
}
|
cs |
- SendEmail.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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package com.mvnschool.vo;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
static String host = "smtp.naver.com";
static int port = 465;
static String username = "네이버아이디@naver.com";
static final String password = "네이버비밀번호";
static String subject = "교사 승인";
static String contents = "교사 승인 알람 메일";
public static void sendEmail(List<String> emailList) throws AddressException, MessagingException{
//서버정보 설정
Properties props = System.getProperties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.trust", host);
//세션 생성 & 발신자 smtp 서버 로그인 인증
Session session = Session.getInstance(props, new javax.mail.Authenticator(){
protected javax.mail.PasswordAuthentication getPasswordAuthentication(){
return new javax.mail.PasswordAuthentication(username, password);
}
});
session.setDebug(true); //디버그 모드
//MimeMessage 생성 & 메일 세팅
Message mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(username)); //발신자
System.out.println("mailSession success");
//가져온 리스트의 사이즈만큼 InternetAddress 배열 크기 정하기
InternetAddress[] addArray = new InternetAddress[emailList.size()];
for(int i=0; i<emailList.size(); i++){ //배열에 이메일을 저장
addArray[i] = new InternetAddress(emailList.get(i));
}
mimeMessage.setRecipients(Message.RecipientType.TO, addArray);
mimeMessage.setSubject(subject); //메일 제목
mimeMessage.setText(contents); //메일 내용
//메일 보내기
Transport.send(mimeMessage);
System.out.println("success sending email");
}
}
|
cs |
⇒ 자바메일 설정하는 동안 만났던 오류들
1. ssl관련 에러
("mail.smtp.ssl.enable", "true" , "mail.smtp.ssl.true", "smtp.naver.com" 처럼 설정을 해주니까 해결)
2. username과 password 관련 에러
(발신자 smtp 서버 로그인 인증을 해야함. Authenticator만들기. 관련 주석의 밑에줄)
3. 그 외
메일을 보낼때 mimeMessage에 addRecipients말고 setRecipients(Message.RecipientType.TO, addArray)를 하니까
(List로 가져온 메일 주소 String을 배열 []로 풀어서 저장) 잘 보내짐.
'Learning > JSP' 카테고리의 다른 글
게시판 파일 입력하기 (0) | 2021.03.16 |
---|---|
Join으로 가져온 데이터들을 테이블에 뿌리기 (0) | 2021.03.10 |
안드로이드 어플 만들기 프로젝트 (Moodtracker) (0) | 2020.10.30 |
포털사이트에서 필요한 정보 출력하기 (jsoup select) (0) | 2020.08.21 |
주소록 만들기2 (0) | 2020.08.21 |