Spring 이메일 보내기
Back-End/Spring 2019. 7. 1. 15:54-이메일 서비스 구축 방법-
이메일 발송을 위해서는 메일 서버가 필요
* 서버 구축 방법 * - 자체 구축 - 포털사이트에서 제공하는 smtp(Simple Mail Transfer Protocol) server 활용 - gmail의 경우 : 내 계정 - 로그인 및 보안 - 기기 활동 및 보안관련 활동 - 보안 수준이 낮은 앱 허용 옵션을 사용으로 설정해야 함 - 여기에서는 gmail을 활용할 예정 |
-실습 예제-
1) pom.xml에 라이브러리 추가
빌드가 잘 안될 경우 스프링의 버전을 조정할 필요가 있음
비슷한 이름의 라이브러리가 있으므로 artifactld (버전 정보를 생략한 jar파일의 이름)를 정확히 확인하고 추가해야 함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<!-- 이메일 발송 관련 라이브러리 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework-version}</version>
</dependency>vax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${org.springframework-version}</version>
</dependency>
|
cs |
2) root-context.xml 에 메일 발송을 위한 bean을 등록
(계정이 등록되어 있어야 하기 때문)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!-- 이메일 발송 bean 설정 -->
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" /> <!-- gmail을 사용 -->
<property name="port" value="587" />
<property name="username" value="이메일주소" />
<property name="password" value="비밀번호" />
<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>
</beans>
|
cs |
3) EmailDTO.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
|
package com.example.spring02.model.email;
public class EmailDTO {
private String senderName; //발신자 이름
private String senderMail; //발신자 이메일 주소
private String receiveMail; //수신자 이메일 주소
private String subject; //제목
private String message; //본문
//getter,setter,toString
public String getSenderName() {
return senderName;
}
public void setSenderName(String senderName) {
this.senderName = senderName;
}
public String getSenderMail() {
return senderMail;
}
public void setSenderMail(String senderMail) {
this.senderMail = senderMail;
}
public String getReceiveMail() {
return receiveMail;
}
public void setReceiveMail(String receiveMail) {
this.receiveMail = receiveMail;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "EmailDTO [senderName=" + senderName + ", senderMail=" + senderMail + ", receiveMail=" + receiveMail
+ ", subject=" + subject + ", message=" + message + "]";
}
}
|
cs |
4) EmailService.java 만들기
1
2
3
4
5
6
7
|
package com.example.spring02.service.email;
import com.example.spring02.model.email.EmailDTO;
public interface EmailService {
public void sendMail(EmailDTO dto);
}
|
cs |
5)EmailServiceImpl.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
|
package com.example.spring02.service.email;
import javax.inject.Inject;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import com.example.spring02.model.email.EmailDTO;
@Service // 서비스 빈으로 등록
public class EmailServiceImpl implements EmailService {
@Inject
JavaMailSender mailSender; // root-context.xml에 설정한 bean, 의존성을 주입
@Override
public void sendMail(EmailDTO dto) {
try {
// 이메일 객체
MimeMessage msg = mailSender.createMimeMessage();
// 받는 사람을 설정 (수신자, 받는사람의 이메일 주소 객체를 생성해서 수신자 이메일주소를 담음)
msg.addRecipient(RecipientType.TO, new InternetAddress(dto.getReceiveMail()));
/*
* createMimeMessage() : MimeMessage객체를 생성시킴 (이것을 이용해서 메시지를 구성한 뒤 메일 발송)
* addRecipient() : 메시지의 발신자를 설정 InternetAddress() : 이메일 주소 getReceiveMail() :
* 수신자 이메일 주소
*/
// 보내는 사람(이메일주소+이름)
// (발신자, 보내는 사람의 이메일 주소와 이름을 담음)
// 이메일 발신자
msg.addFrom(new InternetAddress[] { new InternetAddress(dto.getSenderMail(), dto.getSenderName()) });
// 이메일 제목 (인코딩을 해야 한글이 깨지지 않음)
msg.setSubject(dto.getSubject(), "utf-8");
// 이메일 본문 (인코딩을 해야 한글이 깨지지 않음)
msg.setText(dto.getMessage(), "utf-8");
// html로 보낼 경우
// MimeMessage message = mailSender.createMimeMessage();
// MimeMessageHelper helper
// = new MimeMessageHelper(message, true);
// helper.setTo("test@host.com");
// helper.setText("<html><body><img src='cid:identifier1234'></body></html>", true);
// 이메일 보내기
mailSender.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
cs |
6) admin_menu.jsp 에 이메일 발송 하이퍼링크를 추가
1
|
<a href="${path}/email/write.do">이메일 발송</a> |
|
cs |
7) EmailController.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
|
package com.example.spring02.controller.email;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.spring02.model.email.EmailDTO;
import com.example.spring02.service.email.EmailService;
@Controller // 컨트롤러 어노테이션 선언
@RequestMapping("email/*") // 공통적인 매핑 주소
public class EmailController {
@Inject
EmailService emailService; // 서비스를 호출하기위한 의존성 주입
@RequestMapping("write.do") // 이메일 쓰기를 누르면 이 메소드로 맵핑되어서
public String write() {
return "/email/write"; // 다시 write jsp 페이지로 이동하고 jsp페이지에서 내용을 다 채운 뒤에 확인 버튼을 누르면 send.do로 넘어감
}
@RequestMapping("send.do") // 확인 (메일발송) 버튼을 누르면 맵핑되는 메소드
public String send(@ModelAttribute EmailDTO dto, Model model) {
try {
emailService.sendMail(dto); // dto (메일관련 정보)를 sendMail에 저장함
model.addAttribute("message", "이메일이 발송되었습니다."); // 이메일이 발송되었다는 메시지를 출력시킨다.
} catch (Exception e) {
e.printStackTrace();
model.addAttribute("message", "이메일 발송 실패..."); // 이메일 발송이 실패되었다는 메시지를 출력
}
return "/email/write"; // 실패했으므로 다시 write jsp 페이지로 이동함
}
}
|
cs |
8) write.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
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<%@ include file="../include/header.jsp" %>
</head>
<body>
<%@ include file="../include/admin_menu.jsp" %>
<h2>이메일 보내기</h2>
<form method="post" action="${path}/email/send.do">
<!-- post방식으로 자료를 컨트롤러로 보냄 -->
발신자 이름 : <input name="senderName"><br>
발신자 이메일 : <input name="senderMail"><br>
수신자 이메일 : <input name="receiveMail"><br>
제목 : <input name="subject"><br>
내용 : <textarea rows="5" cols="80" name="message"></textarea>
<br>
<input type="submit" value="전송">
</form>
<span style="color:red;">${message}</span>
</body>
</html>
|
cs |
아래 책은 제가 공부할때 활용했던 책으로 추천드리는 책이니 한번씩 읽어보시는것을 추천드립니다!! ㅎㅎ
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'Back-End > Spring' 카테고리의 다른 글
게시판 만들기 (기본구조, 테이블 생성) (0) | 2019.07.02 |
---|---|
Spring Editor (CKEditor, SummerNote) 사용 (1) | 2019.07.02 |
Spring xml bean property 정리 (0) | 2019.07.01 |
jQuery 이벤트 바인딩 (0) | 2019.06.30 |
드래그앤드롭, ajax 방식의 파일 업로드 (0) | 2019.06.28 |